MW211 EXIT

devlog
ExcelVBA/別シートを選択
2014年08月09日
別シートのセルを選択しようとした場合、以下のように指定しまいがちだ。
┌──────────────────────────────────────┐
│Worksheets("別シート").Range("A1").Select                                   │
└──────────────────────────────────────┘
でも「実行時エラー'1004':RangeクラスのSelectメソッドが失敗しました。」となる。

以下のように二段階でシートを選んで、セルを選ばなければならない。
┌──────────────────────────────────────┐
│Worksheets("別シート").Select                                               │
│Worksheets("別シート").Range("A1").Select                                   │
└──────────────────────────────────────┘

シートは既に絞り込まれているから、セルについては以下のように省略できる。
┌──────────────────────────────────────┐
│Worksheets("別シート").Select                                               │
│Range("A1").Select                                                          │
└──────────────────────────────────────┘

これを一発でやるには「Application.Goto」を使えばいいらしい。
┌──────────────────────────────────────┐
│Application.Goto Worksheets("別シート").Range("A1")                         │
└──────────────────────────────────────┘
この場合は、(「Application.Goto」がその役割を担うので)
「.Select」は不要となる。
分類:ExcelVBA
ExcelVBA/文字が含まれている判定
2014年07月30日
オーソドックスな方法。文字位置を取得する「InStr()」を利用。
┌──────────────────────────────────────┐
│If InStr("文字列", "文") <> 0 Then                                          │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘

正規表現による照合を利用する方法。
┌──────────────────────────────────────┐
│If "文字列" Like "*文*" Then                                                │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘
メタ文字の意味は以下の通り。
┌───┬──────────────────────────────────┐
│?     │任意の1文字                                                         │
├───┼──────────────────────────────────┤
│*     │0文字以上の任意の文字                                               │
├───┼──────────────────────────────────┤
│#     │1文字の数値(0~9)                                                   │
├───┼──────────────────────────────────┤
│[A-Z] │文字群中のいずれか1文字                                             │
├───┼──────────────────────────────────┤
│[!A-Z]│文字群中にないいずれか1文字                                         │
└───┴──────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/全角を含むかの判定
2014年06月27日
半角に変換して変化があるかで判定する。
┌──────────────────────────────────────┐
│If 値 = StrConv(値, vbNarrow) Then                                          │
│    MsgBox "半角のみ"                                                       │
│Else                                                                        │
│    MsgBox "全角を含む"                                                     │
│End If                                                                      │
└──────────────────────────────────────┘

ちなみにその逆で、半角を含むかの判定は以下のようになる。
┌──────────────────────────────────────┐
│If 値 = StrConv(値, vbWide) Then                                            │
│    MsgBox "全角のみ"                                                       │
│Else                                                                        │
│    MsgBox "半角を含む"                                                     │
│End If                                                                      │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/選択した右隣を操作
2014年06月14日
┌──────────────────────────────────────┐
│Sub 選択した右隣にABCを入力するマクロⅠ()                                   │
│    Dim x As Long, y As Long                                                │
│    For x = 1 To Selection.Columns.count                                    │
│        For y = 1 To Selection.Rows.count                                   │
│            Selection.Cells(y, x + 1).Value = "ABC"                         │
│        Next y                                                              │
│    Next x                                                                  │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Sub 選択した右隣にABCを入力するマクロⅡ()                                   │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        r.Offset(0, 1).Value = "ABC"                                        │
│    Next r                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
選択した右隣を操作するには上記のような二つの方法がある。

なお、いずれも先頭に以下を付加しておけば上書の心配はない。
┌──────────────────────────────────────┐
│    If Selection.Columns.count > 1 Then                                     │
│        MsgBox "一列のみ選択してください"                                   │
│        Exit Sub                                                            │
│    End If                                                                  │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ファイルにデータがあるかチェック
2013年12月10日
「C:\data\excel.xls」ってファイルを判定する場合を例にする。

まず、ファイル自体があるかの判定は「Dir()」関数を使う。
この関数は、ファイルが存在すればファイル名を返すので
返り値が空文字であることでファイル不存在を確認できる。
┌──────────────────────────────────────┐
│If Dir("C:\data\excel.xls") = "" Then                                       │
│    Msgbox "ファイルが存在しない"                                           │
│End If                                                                      │
└──────────────────────────────────────┘

続いてファイルサイズの判定には「FileLen()」関数を使う。
この関数は、ファイルサイズを返すので、ずばり「0」であれば空っぽと判定できる。
┌──────────────────────────────────────┐
│If FileLen("C:\data\excel.xls") = 0 Then                                    │
│    Msgbox "ファイルが空っぽ"                                               │
│End If                                                                      │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/行着色・列着色
2013年11月25日
セル「A1」が属する行を赤に着色。
┌──────────────────────────────────────┐
│Cells(y, 1).EntireRow.Interior.Color = RGB(255, 0, 0)                       │
└──────────────────────────────────────┘

セル「A1」が属する列を赤に着色。
┌──────────────────────────────────────┐
│Cells(y, 1).EntireColumn.Interior.Color = RGB(255, 0, 0)                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/行削除・列削除
2013年11月24日
セル「A1」が属する行を削除。
┌──────────────────────────────────────┐
│Cells(1, 1).EntireRow.Delete                                                │
└──────────────────────────────────────┘

セル「A1」が属する列を削除。
┌──────────────────────────────────────┐
│Cells(1, 1).EntireColumn.Delete                                             │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/セルの内容の採取
2013年11月22日
フォルダに当該マクロをもつExcelファイルを置き、
まわりのExcelファイルの特定のシートの特定のセルの内容を取得する。
┌──────────────────────────────────────┐
│Sub 特定シートの特定セルを取得()                                            │
│    Dim y As Long                                                           │
│    Dim strBook As String                                                   │
│    Range(Columns(1), Columns(2)).Clear                                     │
│    y = 0                                                                   │
│    strBook = Dir(ThisWorkbook.Path & "\*.xls")                             │
│    Do While strBook <> ""                                                  │
│        If strBook <> ThisWorkbook.Name Then                                │
│            y = y + 1                                                       │
│            Cells(y, 1) = strBook                                           │
│            Cells(y, 2) = ExecuteExcel4Macro("'" _                          │
│                        & ThisWorkbook.Path & "\" _                         │
│                        & "[" & strBook & "]シート'!R1C1")                  │
│        End If                                                              │
│        strBook = Dir()                                                     │
│    Loop                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
シート名が決まっているのなら「ExecuteExcel4Macro()」で
手軽にできてしまう。

シート名が不定の場合は、シート一覧を取得してどうしてこうしてが
必要となってくるため「CreateObject()」を使うことになりそう。
「ExecuteExcel4Macro()」だけで完結できると速いのだけどね。
分類:ExcelVBA
ExcelVBA/ハイパーリンクの追加削除
2013年11月19日
選択した範囲の文字列をハイパーリンクとして設定してしまうマクロ。
┌──────────────────────────────────────┐
│Sub ハイパーリンク作成()                                                    │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        ActiveSheet.Hyperlinks.Add Anchor:=r, Address:=r.Value              │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
URL一覧とかで、実行すればリンク集となる。

選択した範囲のハイパーリンクを削除するマクロ。
┌──────────────────────────────────────┐
│Sub ハイパーリンク削除()                                                    │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        r.Hyperlinks.Delete                                                 │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
元々、ハイパーリンクを削除した場合、手動で削除しても
罫線が消えてしまうというバグがあるが、このマクロでも手動を代行するだけなので
罫線が消えてしまうので注意。
分類:ExcelVBA
ExcelVBA/列幅自動調整
2013年11月18日
以下の通り。
┌──────────────────────────────────────┐
│Cells.EntireColumn.AutoFit                                                  │
└──────────────────────────────────────┘

以下のようにすればブック内全部のシートについて行うことができる。
┌──────────────────────────────────────┐
│Dim wSheet As Worksheet                                                     │
│'列幅を揃える                                                               │
│For Each wSheet In Worksheets                                               │
│    wSheet.Cells.EntireColumn.AutoFit                                       │
│Next                                                                        │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 次へ