エクセル技道場>マクロ

エクセル技道場 HOME
エクセルの技 目次
シート
関数
名前定義
ツールバー
セル選択
ファイル
条件付き書式
書式設定
編集
印刷
入力規則
マクロ
グラフ
ピボットテーブル
ショートカット
関数語源リスト
関数引数リスト
  1. マクロを削除したのに警告が出る
  2. VBEのフォント
  3. 「このプロジェクトのマクロは無効に設定されています。」エラー
  4. 空白行を行削除
  5. 特定列が未入力の場合その行を削除
  6. 行の削除
  7. 文字の色が赤のセルをイタリックに
  8. 文字の色が赤の場合、その文字をイタリックに
  9. 複数の非表示のシートを一度に再表示
  10. シート一覧の作成
  11. セル内の一部の文字列を抽出
  12. セルに入力した数値で範囲選択
  13. ハイパーリンクをURL表示に
  14. 数値を文字に置換
  15. 1を加算してコピー
  16. 複数セルの文字列を一つにまとめるには
  17. 相対参照と絶対参照を混合して使う
  18. ロックしていないセルデータの削除
  19. ロックしていないセルデータの削除(結合セル)
  20. [記録終了]ツールバーの再表示
  21. 相対参照でマクロの記録
  22. 相対参照から絶対参照に
  23. 数式が入力されているセルに色をつける
  24. 図形の削除
  25. 数値や文字列だけをクリア
  26. 日付の桁を揃える
  27. マクロで画像挿入
  28. Excelの起動と同時に入力モードを[ひらがな]に

Click here to visit our sponsor

マクロを削除したのに警告が出る

【問題】
 マクロを自動記録で作成した後で、以下の手順でマクロを削除しました。

1.メニュー[ツール]-[マクロ]-[マクロ]
2.[マクロの保存先] ボックスの一覧で[作業中のブック]をクリック
3.[マクロ名] ボックスで、削除するマクロの名前をクリック
4.[削除]をクリック

 上書き保存してから、そのファイルを開くと「<ファイル名>はマクロを含んでいます。」というメッセージが出ます。
 どうすれば、このメッセージを出なくすることができるでしょうか?

【回答】
1.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
2.プロジェクトエクスプローラ(通常、左側にあります)で[標準モジュール]をダブルクリック
3.Module1などと表示されているものの上で右クリック-Moduleの解放
4.「エクスポートしますか?」と聞いてきますが、[いいえ]をクリック
5.Alt+F4(メニュー[ファイル]-[終了してMicrosoft Excelへ戻る])
6.Ctrl+S (メニュー[ファイル]-[上書き保存])

【解説】
 上記手順3.でExcel97の場合には、右クリック-Moduleの削除になります。

 上記手順を行った後でも、ファイルを開いた時に「マクロを含んでいます」というメッセージが出る場合には、VBEを開いて、ThisWorkbookやSheet1などのコードウィンドウを開いて、なにかコードが残っていたら、これも削除します。

 また、名前定義が原因である場合もあります。
 以下のページをご覧ください。

[XL97] 特定の名前が定義されているとマクロダイアログが表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;409313&Product=excelJPN

 もし、マクロを作成した覚えは無いのに「マクロを含んでいます」というメッセージが出る、という場合には、ウィルスチェックをされた方が良いと思います。

VBEのフォント

【問題】
 Alt+F11(メニュー[ツール]-[マクロ]-[VBE])でVBE(Visual Basic Editor)を開くと、プロジェクトとプロパティのウインドウの中の文字が、へんな書体になっているのですが、どうすれば直るでしょうか?
 Excel2000を使っています。

【回答】
 以下のページから修正プログラムをダウンロードし、インストールすることで直ります。

Microsoft Office 2000 Visual Basic Editor の表示の修正プログラム
http://www.microsoft.com/downloads/details.aspx?FamilyID=781FA2E1-205A-4310-9BE8-113A473F98C6&displaylang=JA

【解説】
 修正プログラム O9VBEupd.exe のファイルサイズは、848KBです。

 Officeをアップデートすることでも、表示が正しく行われるようになります。

Office のアップデート
http://office.microsoft.com/OfficeUpdate/default.aspx

「このプロジェクトのマクロは無効に設定されています。」エラー

【問題】
 これまで問題無く使っていたマクロを実行しようとしたところ、以下のエラーが出てマクロが使えなくなりました。

「このプロジェクトのマクロは無効に設定されています。マクロを有効にする方法についてはオンラインヘルプまたはホストアプリケーションのドキュメントを参照してください。」

 どうしたら、マクロを実行できるようになるでしょうか?

【回答】
1.メニュー[ツール]-[マクロ]-[セキュリティ]
2.[セキュリティレベル]タブで[中]をクリック
3.[OK]ボタンをクリック

【解説】
 セキュリティレベルが[高]に設定されていると、マクロは自動的に無効になってブックが開きます。
 上記手順で、セキュリティレベルを[中]に変更してから、ファイルを開くと「<ファイル名>はマクロを含んでいます。」というメッセージが出ますので、ここで[マクロを有効にする]ボタンをクリックすると、作成したマクロを使用できるようになります。

 詳しくは以下のページをご覧ください。

[XL2000] マクロのセキュリティ レベルが「高」に変更される
http://support.microsoft.com/default.aspx?scid=kb;ja;262876&Product=excelJPN

空白行を行削除

【問題】
 マクロで何もデータ、数式、コメントが入っていない行を削除するにはどうしたら良いでしょうか?

【回答】
Sub DeleteBlankRows()
  Application.ScreenUpdating = False
    On Error Resume Next
    With Cells
      .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True
      .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True
      .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True
      .SpecialCells(xlCellTypeVisible).EntireRow.Delete
      .EntireRow.Hidden = False
    End With
  Application.ScreenUpdating = True
End Sub

【解説】
 上記マクロは以下のような流れになっています。

1.定数(数値、文字列など)、数式、コメントが入っているセルの行を非表示に
2.表示されている行を全て削除
3.全ての行を再表示

 上記マクロを実行するには、以下の手順です。

1.上記マクロの Sub から End Sub までを選択してCtrl+C (コピー)
2.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
3.プロジェクトエクスプローラで、VBAProject(<当該ブック名>)を選択
4.メニュー[挿入]-[標準モジュール]
5.Ctrl+V (貼り付け)
6.Alt+F4(メニュー[ファイル]-[終了してMicrosoft Excelへ戻る])
7.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
8.実行したいマクロ名(この場合、DeleteBlankRows)を選択
9.[実行]ボタンをクリック

特定列が未入力の場合その行を削除

【問題】
 マクロで、C列D列のどちらにもデータ、数式、コメントが入っていない行を削除するにはどうしたら良いでしょうか?

【回答】
Sub DeleteBlankRows2()
  Application.ScreenUpdating = False
    On Error Resume Next
    With Columns("C:D")
      .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True
      .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True
      .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True
     
      .SpecialCells(xlCellTypeVisible).EntireRow.Delete
      .EntireRow.Hidden = False
    End With
  Application.ScreenUpdating = True
End Sub

【解説】
 前回のコードの With Cells のところを With Columns("C:D") に変更しただけです。

 「A列のセルにデータ、数式、コメントが入っていない行を削除」という場合には、 With Columns("C:D") のところを

With Columns("A")

または

With Columns(1)

のようにします。

行の削除

【問題】
 マクロで、A列に 2 が入力されていたらその行を削除するにはどうしたら良いでしょうか?

Data1 Data2 Data3
3 2 7
1 5 1
2 2 1 この行削除
2 6 3 この行削除
5 9 6
2 0 8 この行削除

【回答】
Sub Test()
  Const intCriteria As Integer = 2
 
  With Cells(2, 1).CurrentRegion
    On Error GoTo errhandler
    .AutoFilter Field:=1, Criteria1:=intCriteria
    .Offset(1).Resize(.Rows.Count - 1). _
    SpecialCells(xlCellTypeVisible).EntireRow.Delete
  End With
  ActiveSheet.AutoFilterMode = False
  Exit Sub
 
errhandler:
  ActiveSheet.AutoFilterMode = False
  MsgBox intCriteria & "はありません。"
End Sub

【解説】
 上記マクロは以下のような流れになっています。

1.メニュー[データ]-[フィルタ]-[オートフィルタ]
2.A列のオートフィルタ矢印をクリックして、 2 を選択
3.列見出しを除く可視セルの行を削除
4.オートフィルタを解除

 A列に 2 が入力されているセルがなければ、「2はありません。」というメッセージが表示されます。

 For〜Nextでしたら、以下のような感じでしょうか。

Sub Test2()
  Dim lngRow As Long
  Dim lngCount As Long
  
  lngRow = Cells(Rows.Count, 1).End(xlUp).Row
  
  For lngCount = lngRow To 2 Step -1
    If Cells(lngCount, 1).Value = 2 Then Rows(lngCount).Delete
  Next
End Sub

文字の色が赤のセルをイタリックに

【問題】

 シート内に文字の色が赤に設定されているセルがいくつかあります。
 そのセルの書式をイタリック(斜体)に設定するにはどうしたら良いでしょうか?
 マクロで実現します。

【回答】

Sub test()
  Dim c As Range
   
  Application.ScreenUpdating = False
    For Each c In ActiveSheet.UsedRange
      With c.Font
        If .Color = vbRed Then .Italic = True
      End With
    Next
  Application.ScreenUpdating = True
End Sub

【解説】

 色の定数には以下があります。

vbBlack    黒
vbRed      赤
vbGreen    緑
vbYellow   黄
vbBlue     青
vbMagenta  マゼンタ
vbCyan     シアン
vbWhite    白

文字の色が赤の場合、その文字をイタリックに

【問題】

 シート内にセル内の一部の文字の色が赤に設定されているセルがいくつかあります。
 その赤字の文字の書式だけをイタリック(斜体)に設定するにはどうしたら良いでしょうか?
 マクロで実現します。

【回答】

Sub test2()
  Dim c As Range
  Dim i As Integer
 
  Application.ScreenUpdating = False
    For Each c In ActiveSheet.UsedRange
      For i = 1 To c.Characters.Count
        With c.Characters(i, 1).Font
          If .Color = vbRed Then .Italic = True
        End With
      Next
    Next
  Application.ScreenUpdating = True
End Sub

【解説】

 ScreenUpdatingプロパティの値をFalseにすることで画面を更新しないようにします。これでマクロの実行速度が速くなります。
 マクロ終了後、ScreenUpdatingプロパティの値をTrueに戻します。

 イタリックではなく、太字にするには、 .Italic = True のところを .Bold = True とします。

複数の非表示のシートを一度に再表示

【問題】

 ブック内に20前後のシートがあり、その内10シートを非表示にしています。
 マクロで非表示になっているシートを全部再表示するには、どうしたら良いでしょうか?

【回答】

Sub test()
  Dim Sh As Object
 
  Application.ScreenUpdating = False
    For Each Sh In Sheets
      Sh.Visible = True
    Next
  Application.ScreenUpdating = True
End Sub

【解説】

 複数のシートを非表示にするには、以下の手順です。

1.Ctrlキーを押しながら非表示にしたいシートのシート見出しをクリックして複数シートを選択
2.メニュー[書式]-[シート]-[表示しない]

 非表示になっているシートを再表示するには、以下の手順です。

1.メニュー[書式]-[シート]-[再表示]
2.再表示させたいシートを選択
3.Enter

 回答で示したコードはグラフシートも対象にしています。
 ワークシートだけを対象にする場合には以下のようになります。

Sub test2()
  Dim Sh As Worksheet
 
  Application.ScreenUpdating = False
    For Each Sh In Worksheets
      Sh.Visible = True
    Next
  Application.ScreenUpdating = True
End Sub

シート一覧の作成

【問題】

 ブック内のシート名を一覧表示するにはどうすれば良いでしょうか?

【回答】

Sub test()
  Dim i As Integer
 
  For i = 1 To Sheets.Count
    ActiveCell.Offset(i - 1).Value = Sheets(i).Name
  Next
  ActiveCell.EntireColumn.AutoFit
End Sub

【解説】

 回答で示したコードはグラフシートも対象にしています。
 ワークシートだけを対象にする場合には以下のようになります。

Sub test2()
  Dim i As Integer
 
  For i = 1 To Worksheets.Count
    ActiveCell.Offset(i - 1).Value = Worksheets(i).Name
  Next
  ActiveCell.EntireColumn.AutoFit
End Sub

セル内の一部の文字列を抽出

【問題】

 セル内の "『" と "』" で挟まれた文字列をマクロを使って他のセルに書き出すにはどうしたら良いでしょうか?

 例えば、セルA1に、

あいうえお『かき』くけこ

が入力されているとします。。

 これを、 "『" と "』" で挟まれた文字列 "か" のみ抽出し、セルB1に、

かき

と表示させたいのです。

※ "『" と "』"は、セル内にそれぞれ一つずつしか存在しません。
※ "『" と "』"の位置は固定されていません。何文字目か不明確です。
※ "『" と "』"に挟まれた文字数は一定ではありません。何も入っていないこともありますし、1文字以上入っていることもあります。

【回答】

 範囲を選択して、以下のマクロを実行すると右隣のセルに"『" と "』" で挟まれた文字列を抽出します。

Sub test()
  Const Chr1 As String = "『"
  Const Chr2 As String = "』"
 
  Dim c As Range
  Dim Srch As String
  Dim Btwn As String
 
  For Each c In Selection
    Srch = c.Value & Chr1 & Chr2
    Btwn = Mid(Srch, InStr(Srch, Chr1) + 1, _
    InStr(Srch, Chr2) - InStr(Srch, Chr1) - 1)
    c.Offset(, 1).Value = Btwn
  Next
End Sub

【解説】

 ワークシート関数だと、

=MID(A1,FIND("『",A1&"『』")+1,FIND("』",A1&"『』")-FIND("『",A1&"『』")-1)

といった感じになります。

セルに入力した数値で範囲選択

【問題】

 セルA1に入力した任意の数だけ2行目以下の行を選択するにはどうしたら良いでしょうか?
 例えばセルA1に 3 と入力したら、A2:A4を選択するようにしたいのです。

【回答】

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim lngRows As Long
  lngRows = Cells(1, 1).Value

  If Target.Address <> "$A$1" Then Exit Sub
  If lngRows < 1 Or lngRows > Rows.Count - 1 Then Exit Sub
  Cells(2, 1).Resize(lngRows).Select
End Sub

【解説】

 シートタブ上で右クリック-[コードの表示]で表示されるコードウィンドウに上記マクロを入力します。

ハイパーリンクをURL表示に

【問題】

 セルに会社名を表記し、ハイパーリンクでURLを入力してあります。
 それをURL表記に変更したいのですが、一件ずつやる方法ではなく、一度に変更する方法はないでしょうか?

【回答】

Sub test()
 Dim c As Range

 For Each c In ActiveSheet.UsedRange
  If c.Hyperlinks.Count = 1 Then
   c.Value = c.Hyperlinks(1).Address
  End If
 Next
End Sub

【解説】

 上記マクロを実行するには以下の手順です。

1.Alt+F11(メニュー[ツール]−[マクロ]−[VBE])
2.メニュー[挿入]-[標準モジュール]
3.上記マクロコードをコピーして、コードウィンドウ上でCtrl+V (貼り付け)
4.Alt+Q(VBEを終了)
→ワークシートに戻る
5.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
6. test を選択して[実行]ボタンをクリック

数値を文字に置換

【問題】

 シート内に1〜6までの数字が複数あり、この数字と一致した場合、A、B、C、D、E、Fにそれぞれ置き換えたいのですがどうすれば良いでしょうか?
 マクロで実現します。

【回答】

Sub Test()
  Dim i As Integer
 
  For i = 1 To 6
    Cells.Replace What:=i, Replacement:=Chr(64 + i)
  Next
End Sub

【解説】

 Ctrl+H (メニュー[編集]-[置換])で[検索する文字列]に 数字 を、[置換後の文字列]に 対応するアルファベット を入力、これを6回繰り返すことを上記マクロは実行しています。

 アルファベット A のコード番号は 65 、Bのコード番号は66 ・・・とコード番号は1ずつ増えていきます。そこで、[置換後の文字列]として、Chr(64 + i) としているわけです。

1を加算してコピー

【問題】

 たとえばD1:D18に数値が入っています。
 これに 1 を 加算した数値をB3:B20へコピーするにはどうしたら良いでしょうか?
 マクロで実現します。

【回答】

Sub test()
  With Range("B3:B20")
    .Formula = "=D1+1"
    .Copy
    .PasteSpecial Paste:=xlValues
  End With
  Application.CutCopyMode = False
End Sub

【解説】

 上記マクロは以下を実行しています。

1.B3:B20を選択
→セルB3がアクティブでB3:B20を選択している状態
2.=D1+1 をCtrl+Enterで入力
3.Ctrl+C (コピー)
4.メニュー[編集]-[形式を選択して貼り付け]
5.[値]にチェックしてEnter

複数セルの文字列を一つにまとめるには

【問題】

 A2:A100に文字列が入っています。

例:あ、い、う、え、お、か、き、く、、、、100

 セルA1に、それぞれの文字列の間に「・」を入れて、それらをまとめた

あ・い・う・え・お・、、、、・99・100

を表示させたいのですが、どうすれば良いでしょうか?
 マクロで実現します。

【回答】

Sub Moji_Chain2()
  Dim MojiChain As String
  Dim c As Range
 
  For Each c In Range("A2:A100")
    If c.Value <> "" Then MojiChain = MojiChain & c.Value & "・"
  Next
 
  Range("A1").Value = Left(MojiChain, Len(MojiChain) - 1)
End Sub

【解説】

 ワークシート関数だったら、以下のような感じでしょうか?

=A2&"・"&A3&"・"&A4&"・"&A5

 これが &"・"&A100 まで続きます。長いですね ^^;

相対参照と絶対参照を混合して使う

【問題】

 マクロで複数のセルに式を入力するには、以下のようなコードを使います。

Sub test()
  Range("B1:B10").Formula = "=C1+D1"
End Sub

 これで、
セルB1には =C1+D1
セルB2には =C2+D2
のように数式が入力されます。

 数式内に相対参照と絶対参照を混合して使うにはどういうコードを使えば良いでしょうか?

B1の内容=C1の内容+D1の内容*A1の内容
B2の内容=C2の内容+D2の内容*A1の内容
B3の内容=C3の内容+D3の内容*A1の内容
               ・
               ・
Bnの内容=Cnの内容+Dnの内容*A1の内容

といったことをしたいのです。
(A1は普遍で常に参照しています)

【回答】

Sub test()
  Range("B1:B10").Formula = "=C1+D1*$A$1"
End Sub

【解説】

 数式ではなく値にということでしたら、以下はいかがでしょう?

Sub test2()
  With Range("B1:B10")
    .Formula = "=C1+D1*$A$1"
    .Copy
    .PasteSpecial Paste:=xlValues
  End With
  Application.CutCopyMode = False
End Sub

ロックしていないセルデータの削除

【問題】

 ロックしていないセルのデータだけを削除したいのですが、どうすれば良いでしょうか?
 マクロで実現します。

【回答】

Sub test()
  Dim c As Range
 
  For Each c In ActiveSheet.UsedRange
    If Not (c.Locked) Then c.ClearContents
  Next
End Sub

【解説】

 セルのロック、シートの保護については以下のページをご覧ください。

【エクセル技道場】−シート−シートの保護
http://www2.odn.ne.jp/excel/waza/sheet.html#SEC9

ロックしていないセルデータの削除(結合セル)

【問題】

 ロックしていないセルのデータだけを削除したいのですが、どうすれば良いでしょうか?
 一部、結合セルがあります。

【回答】

Sub test2()
  Dim c As Range
 
  With ActiveSheet
    .Unprotect
    For Each c In .UsedRange
      If Not (c.Locked) Then c.MergeArea.ClearContents
    Next
    .Protect UserInterfaceOnly:=True
  End With
End Sub

【解説】

・シートの保護を解除
・処理(ロックしていないセルのデータだけを削除)
・シートの保護
を実行しています。

[記録終了]ツールバーの再表示

【問題】

 メニュー[ツール]-[マクロ]-[新しいマクロの記録]で[OK]ボタンをクリックすると、[記録終了]ボタンと[相対参照]ボタンがある[記録終了]ツールバーが表示されますが、ある時からこの[記録終了]ツールバーが表示されなくなりました。
 どうしたら、[記録終了]ツールバーを表示させるようにできるでしょうか?

【回答】

1.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
2.[OK]ボタンをクリック
3.メニューバー/ツールバー上のどこかで右クリック
4.[記録終了]をクリック

【解説】

 一度マクロの自動記録状態にしてから、ツールバー右クリックで[記録終了]が選択できるようになります。

相対参照でマクロの記録

【問題】

 例えば、右隣のセルを選択するというマクロを作成したいのですが、

1.セルA1を選択
2.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
3.[OK]ボタンをクリック
4.セルB1を選択
5.[記録終了]ボタンをクリック

という手順でマクロの自動記録をして、セルC1を選択してからAlt+F8で上記マクロを実行すると、セルB1が選択されます。
 これをセルC1を選択してマクロを実行するとセルD1が選択、セルA2を選択してマクロを実行するとセルB2が選択されるように、マクロの自動記録をするにはどうしたら良いでしょうか?

【回答】

1.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
2.[OK]ボタンをクリック
3.[記録終了]ツールバーの[相対参照]ボタンをクリック
4.記録したい操作を実行
5.[記録終了]ボタンをクリック

【解説】

 [相対参照]ボタンをクリックしないで[新しいマクロの記録]とすると、

Sub Macro1()
  Range("B1").Select
End Sub

のようなコードが作成されます。

 [相対参照]ボタンをクリックして[新しいマクロの記録]とすると、

Sub Macro2()
  ActiveCell.Offset(0, 1).Range("A1").Select
End Sub

のようなコードが作成されます。
 通常は、.Range("A1")の部分は不要なので、自分でコードを作成する場合には、


Sub test()
  ActiveCell.Offset(0, 1).Select
End Sub

のようなコードになります。

相対参照から絶対参照に

【問題】

 数式を絶対参照に一括で変換をする方法はあるでしょうか?
 例えば =A1+B1 といった数式を =$A$1+$B$1 へとしたいのですが、一箇所のセルだけではなく、複数のセルの数式の絶対参照への変換を一括で行う方法はないでしょうか?

【回答】

Sub test()
  Dim c As Range
 
  For Each c In Selection
    If c.HasFormula Then
      c.Formula = Application.ConvertFormula(Formula:=c.Formula, _
        FromReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
    End If
  Next
                 
End Sub

【解説】

 ToAbsolute:= のところで、変換後の参照の種類を指定します。

xlAbsolute     行列とも絶対参照に
xlAbsRowRelColumn 行だけ絶対参照に
xlRelRowAbsColumn 列だけ絶対参照に
xlRelative     行列とも相対参照に

 以下のページもご参考になるのでは?

[XL97] 数式の特定セルへの参照形式を変更する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;408067&Product=excelJPN

数式が入力されているセルに色をつける

【問題】

 シート内で数式が入力されているセルだけに色を付けるにはどうしたら良いでしょうか?

【回答】

1.Alt+F11
2.メニュー[挿入]-[標準モジュール]
3.コードウィンドウに以下を入力

Sub test()
  With Cells
    .Interior.ColorIndex = xlNone
    On Error Resume Next
    .SpecialCells(xlCellTypeFormulas).Interior.Color = vbYellow
  End With
End Sub

4.Alt+F4(VBEを閉じる)
5.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ]
6.マクロ test を選択して[実行]ボタンをクリック

【解説】

 上記マクロは以下を実行しています。

1.Ctrl+A(全セルを選択)
2.Ctrl+1 (メニュー[書式]-[セル])
3.[パターン]タブで 色なし をクリック
4.[OK]ボタンをクリック
5.Ctrl+G (メニュー[編集]-[ジャンプ])
6.[セル選択]ボタンをクリック
7.[数式]にチェック
8.Enter
9.Ctrl+1 (メニュー[書式]-[セル])
10.[パターン]タブで 黄色 をクリック

図形の削除

【問題】

 マクロでシートに貼り付けた図形(複数)を一度に全部削除させたいのですが、どうすればよいでしょうか?

【回答】

Sub Test2()
  ActiveSheet.DrawingObjects.Delete
End Sub

【解説】

 一般操作だと以下の手順になります。

1.Ctrl+G (メニュー[編集]-[ジャンプ])
2.[セル選択]ボタンをクリック
3.[オブジェクト]にチェックを入れる
4.Enter
5.Deleteキー

数値や文字列だけをクリア

【問題】

 マクロで、計算式が入っているセルはそのままにしておいて、数値や文字列などが入力されてるセルのデータをクリアするにはどうしたら良いでしょうか?

【回答】

Sub Test()
 On Error Resume Next
 Cells.SpecialCells(xlCellTypeConstants).ClearContents
End Sub

【解説】

 一般操作だと以下の手順になります。

1.Ctrl+G (メニュー[編集]-[ジャンプ])
2.[セル選択]ボタンをクリック
3.[定数]にチェックを入れる
4.Enter
5.Deleteキー

日付の桁を揃える

【問題】

 年月日を入力した時に前ゼロをスペースにし、桁を揃えたいのですがうまく出来ません。

平成9年9月14日
昭和60年10月4日

のようなデータを以下のように、月と日の位置をあわせたいのですが、どうすればよいでしょうか?

平成 9年 9月14日
昭和60年10月 4日

【回答】

○関数で桁を揃える。

 A列にデータが入っているとします。
 B列のフォントを MS ゴシック などの等幅フォントにします。

1.B列を選択
2.Ctrl+1 (メニュー[書式]-[セル])
3.[フォント]タブで MS ゴシック を選択
4.[OK]ボタンをクリック

 セルB1に以下の数式を入力します。

=TEXT(A1,"ggg")&
RIGHT(TEXT(A1," e年"),3)&
TEXT(MONTH(A1),"??月")&
TEXT(DAY(A1),"??日")

○そのセルの表示形式を変更して年月日の桁を揃える。

1.セルを選択
2.Ctrl+1 (メニュー[書式]-[セル])
3.[表示形式]タブの[分類]を[ユーザー定義]に
4.[種類]に

年1桁、月1桁、日1桁 → ggg_1e"年"_1m"月"_1d"日"
年1桁、月1桁、日2桁 → ggg_1e"年"_1m"月"d"日"
年1桁、月2桁、日1桁 → ggg_1e"年"m"月"_1d"日"
年1桁、月2桁、日2桁 → ggg_1e"年"m"月"d"日"
年2桁、月1桁、日1桁 → ggge"年"_1m"月"_1d"日"
年2桁、月1桁、日2桁 → ggge"年"_1m"月"d"日"
年2桁、月2桁、日1桁 → ggge"年"m"月"_1d"日"
年2桁、月2桁、日2桁 → ggge"年"m"月"d"日"

を入力

5.[OK]ボタンをクリック

○マクロでA列に日付が入力されると年月日の桁を揃える。

 シートタブ上で右クリック-[コードの表示]で表示されるコードウィンドウに下記マクロを入力。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim tmp As Variant
  
 With Target
  If .Column <> 1 Then Exit Sub 'A列のみを対象
  tmp = .Value
  If IsDate(tmp) Then
   .NumberFormatLocal = "ggg" & _
    IIf(Format(tmp, "e") > 9, "e年", "_0e年") & _
    IIf(Month(tmp) > 9, "m月", "_1m月") & _
    IIf(Day(tmp) > 9, "d日", "_1d日")
  End If
 End With
End Sub

○マクロで選択した範囲の日付の年月日の桁を揃える。

Sub test()
 Dim c As Range
 Dim tmp As Variant
 
 Application.ScreenUpdating = False
  For Each c In Intersect(Selection, ActiveSheet.UsedRange)
   tmp = c.Value
   If IsDate(tmp) Then
    c.NumberFormatLocal = "ggg" & _
     IIf(Format(tmp, "e") > 9, "e年", "_1e年") & _
     IIf(Month(tmp) > 9, "m月", "_1m月") & _
     IIf(Day(tmp) > 9, "d日", "_1d日")
   End If
  Next
 Application.ScreenUpdating = True
End Sub

1.上記マクロの Sub から End Sub までを選択してCtrl+C (コピー)
2.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
3.プロジェクトエクスプローラで、VBAProject(<当該ブック名>)を選択
4.メニュー[挿入]-[標準モジュール]
5.Ctrl+V (貼り付け)
6.Alt+F4(メニュー[ファイル]-[終了してMicrosoft Excelへ戻る])
7.桁を揃えたいセル範囲を選択
8.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
9.実行したいマクロ名(この場合、test)を選択
10.[実行]ボタンをクリック

マクロで画像挿入

【問題】

 デジカメで撮った写真をエクセルのシートに貼り付けたいと思っています。
 メニューの[挿入]-[図]-[ファイルから]でファイルを選択すれば画像を挿入できることは知っていますが、一つのフォルダ内に数十枚ある画像ファイルすべてを、ある程度サイズを統一して、一つのセルに一つの画像ファイルという状態で、A列に挿入したい場合、どのようなマクロにすればよいでしょうか?

【回答】

 以下のマクロは、選択したファイルのフォルダ内の画像ファイル(jpgファイル)すべてをA列に挿入、B列にA列のファイル名を書き込むものです。

Sub InsertPictures()
 Dim i As Integer
 Dim myDir As String
 Const myHeight = 200 '行の高さ。0-409を指定。写真のサイズがこれで調整される。
 Const myWidth = 50 '列の幅。0 - 255を指定。
 Dim myFName As String
 
 myDir = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")
 If myDir = "False" Then Exit Sub
 myDir = Left(myDir, Len(myDir) - Len(Dir(myDir)))
 
 Application.ScreenUpdating = False
  ActiveSheet.DrawingObjects.Delete
  Columns(2).ClearContents
  Rows.AutoFit
  
  i = 1
  myFName = Dir(myDir & "*.jpg")
 
  Do While myFName <> ""
   With Cells(i, 1)
    .Activate
    .RowHeight = myHeight
   End With
   With ActiveSheet
    .Pictures.Insert myDir & myFName
    With .Shapes(i)
     .LockAspectRatio = msoTrue
     .Height = myHeight
    End With
   End With
   Cells(i, 2).Value = myFName
   myFName = Dir
   i = i + 1
  Loop

  Columns(1).ColumnWidth = myWidth
  Columns(2).AutoFit
 Application.ScreenUpdating = True
End Sub

 上記マクロを実行するには、以下の手順です。

1.上記マクロの Sub から End Sub までを選択してCtrl+C (コピー)
2.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
3.プロジェクトエクスプローラで、VBAProject(<当該ブック名>)を選択
4.メニュー[挿入]-[標準モジュール]
5.Ctrl+V (貼り付け)
6.Alt+F4(メニュー[ファイル]-[終了してMicrosoft Excelへ戻る])
7.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
8.実行したいマクロ名(この場合、InsertPictures)を選択
9.[実行]ボタンをクリック

【解説】

 サンプルファイル「InsertPictures.xls」を用意しました。
 サンプルファイル「InsertPictures.xls」を開くと、自動的にメニューバーに[InsertPictures]と[InsertThumbnails]という二つのボタンが追加されます。

 [InsertPictures]ボタンをクリックすると、上記マクロが実行されるので、画像すべてを挿入したいフォルダ内のファイルのいずれかを選択し、[開く]ボタンをクリックすると、選択したファイルのフォルダ内の画像ファイル(jpgファイル)すべてをA列に挿入、B列にA列のファイル名を書き込みます。

 [InsertThumbnails]ボタンをクリックして、同様にファイルを選択して[開く]ボタンをクリックすると、小さいサイズで一覧を作成します。

 サンプルファイル「InsertPictures.xls」を閉じると、自動的にメニューバーから二つのボタンが削除されます。

Excelの起動と同時に入力モードを[ひらがな]に

【問題】

 エクセルを常に日本語入力からはじめることはできないのでしょうか?開いた時点でそのまま日本語で入力したいということです。

【回答】

 個人用マクロブック(Personal.xls)のThisWorkbookに以下を記述します。

Private Sub Workbook_Open()
 SendKeys "%{kanji}"
End Sub

【解説】

 SendKeysステートメントで、Altキーと他のキーとの組み合わせを指定するには%を他のキーの前につけます。

 個人用マクロブックとは、自分がExcelで作業する際に共通して使用したいマクロ等を記録しておくマクロ保存専用のファイルです。一旦作成すると、Excelの起動とともに、この個人用マクロブック(ファイル名はPersonal.xls)が開かれるようになります。ただし、通常、非表示の状態なので、実際にそのファイルを目にすることはありません。

 個人用マクロブックを作成するには、以下の手順です。

1. メニュー[ツール]-[マクロ]-[新しいマクロの記録]
2. [マクロの記録]ダイアログボックスで、[マクロの保存先]を[個人用マクロブッ
ク]として、[OK]ボタンをクリック
3. [記録終了]ツールバーの[記録終了]ボタンをクリック

 なお、本来は、上記手順3の[記録終了]ボタンをクリック、の前にマクロにした
い操作などを実行しますが、今回の目的は、とりあえず[個人用マクロブック]を作
成すること、なので何もしません。

 さて、上記手順を実行した後に、以下の手順です。

1. Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
2. 左の方に表示されているプロジェクトエクスプローラのVBAProject(PERSONAL..XLS)のMicrosoft Excel ObjectsのThisWorkbookをダブルクリックして開く
3. ダブルクリックで開いたコードウィンドウに↓をコピー&ペースト

Private Sub Workbook_Open()
 SendKeys "%{kanji}"
End Sub

4. Excelを終了しようとすると、[個人用マクロブックの変更を保存しますか?(後略)]というメッセージがでるので、[はい]をクリック
→これでExcelが終了

 これで次回Excel起動時から入力モードが[ひらがな]になります。
 なお、やっぱり起動時から入力モードを[ひらがな]にはしたくない、そして個人用マクロブック自体もう不要ということになったら、起動フォルダのPersonal.xlsを削除します。

 その人その人によってExcelの使い方は異なるので、「Excel起動から入力モードを[ひらがな]にする」のが便利な方もいらっしゃるかとは思います。
 しかしながら、一般的には、Excelは計算処理をさせるのが主目的、すなわち、数値や数式を入力するのが大半の作業です。
 なので、入力規則を活用して、特定の列や範囲の入力モードを[ひらがな]にする、というのがおすすめです。この具体的な方法は↓をご覧ください。

エクセル技道場−入力モード
http://www2.odn.ne.jp/excel/waza/validation.html#SEC6


Yahoo!ブックマークに登録
エクセル(Excel)技道場 HOME | このページのトップ
Google
ウェブ全体から検索 【エクセル技道場】内を検索