コードリスト

このページでは目的別のVBAコードをまとめてあります。

初めてVBAを触る方にとっては難しいかと思いますが、
3つの特典付き商品に限らず、自動化はこのページのコードを組み合わせて処理しています。

目的別コードに対する説明文も記載しているので、
処理に対するQ&Aとして使っていただければ幸いです。

ファイル出力

①型を定義

Dim Names As Variant
Dim outputPlace As String
Dim newBook As Workbook

②変数に値(文字)を設定

Names = “ファイル出力”
outputPlace = “C:\Users\***\Desktop” & fileName & “.xlsm”

③新しいブックを追加

Set newBook = Workbooks.Add()

④追加した新しいブックをoutputPlaceの名前で保存

Call newBook.SaveAs(FileName:=outputPlace, FileFormat:=xlOpenXMLWorkbookMacroEnabled)
Call newBook.Close

データ削除

特定のセルの値を削除する場合

Cells(2,1).ClearContents

※Cells(2,1)でA2の指定しています。

2行目から最終行目までのデータを削除する場合

①各値の型を指定

Dim i As Long
Dim LastRow
Dim wb As Workbook
Dim Sht As Worksheet

②削除したい値があるシートを変数に設定

Set wb = Workbooks(“sample.xlsm”)
Set Sht = wb.Sheets(“データ”)

※「sample」の部分は実際のファイル名に合わせて変更してください。
※「データ」の部分は実際のシート名に合わせて変更してください。

③A列の最終行を取得

LastRow = Sht.Cells(Rows.Count, 1).End(xlUp).Row
※(Rows.Count, 1)の1でA列を指定しています。
For i = 2 To LastRow
Sht.Range(Cells(i, 1), Cells(i, 5)).ClearContents
Next i

※(Cells(i, 1), Cells(i, 5))の部分は、A~E列までを指定しています。
例えばL列までデータがある場合は、(Cells(i, 1), Cells(i, 12))と変更してください。
A列を1として、B列が2、C列が3と番号が振ってあります。
L列は12番目のため、Cells(i, 12)になります。
※ネットで「エクセル 列番号」と検索すると、
列に対する番号の早見表があるので参考にしてみてください。

削除するためには「.ClearContents」を指定したセルの最後につけます。

自動保存

「ワークブック.Save」で自動保存ができます。
※ワークブックの所をお使いのファイル名を設定した変数に変えて下さい。

複数条件

VBAで特定の条件に合うデータのみを処理したい場合、

If ~ Then
“ここに処理内容を書きます”
End If

と言うコードを書きます。

例えば、B列の値が「あり」のデータのみを集計したい場合は次のように書きます。

For i = 2 To LastRow
If Sht.Cells(i, 2).Value = “あり” Then
“ここに処理内容を書きます”
End If
Next i

次に、B列の値が「あり」かつ、C列の値が「100」のデータのみを集計する場合は次のように書きます。

For i = 2 To LastRow
If Sht.Cells(i, 2).Value = “あり” And Sht.Cells(i, 3).Value = 100 Then
“ここに処理内容を書きます”
End If
Next i

複数条件の場合は「If ~ Then」の中に”And”を書いた後に2つ目の条件を設定します。
Andを使う場合は2つの条件を満たす場合は~と言う意味になります。
他には「Or」を使った方法があるので、こちらもご紹介させていただきます。

For i = 2 To LastRow
If Sht.Cells(i, 2).Value = “あり” Or Sht.Cells(i, 3).Value = 100 Then
“ここに処理内容を書きます”
End If
Next i

先ほどのAndを使った複数条件のコードと違うのは、AndをOrに変えただけです。
けれど、この式は全く別の意味になります。
と言うのも、Orにすると「1つ目の条件もしくは2つ目の条件を満たす場合」
と言う意味になるからです。

どちらを使うかはその時の処理内容で変わりますが、
私が普段からデータの自動処理をする時にもこの2つを使い分けています。

慣れるまでは難しく感じますし、複雑な条件分岐の処理内容を書いていると間違うこともあります。
ですので、試しながら理解することをオススメします。

置換

Range(“A2:A100”).Replace “あり”, “なし”, xlPart

このコードは、
A列の2行目から100行目までにある「あり」の文字を「なし」に変えると言う内容です。
B列にしたい場合はRange(“B2:B100”)のように書きます。
そして、「あり」の文字を「空白」に変えたい場合は次のように書きます。

Range(“B2:B100”).Replace “あり”, “”, xlPart

100行までを指定するためにB100と書いていますが、1000行目までであればB1000とします。
この置換は全角スペースを半角スペースに変えることもできます。

Range(“B2:B100”).Replace “ ”, ” “, xlPart

ぱっと見では分かりにくいかと思いますが、””の間隔が微妙に違っています。
置換は扱うデータごとのクセを統一する時に私もよく使っています。
置換前の値を手入力すると違うデータを変更してしまうこともあるので、
そういう時は置換したい値をコピーしてVBAのコードに貼り付けると間違いを減らせます。

おまけ

私の仕事環境ではネットワーク上にある”共有フォルダ”にデータを置いてエクセルファイルを共有しています。
もちろんVBA(マクロ)の処理をするファイルも共有フォルダにありますが、Windowsのアップデートで設定の変更を余儀なくされました。
セキュリティ対策によっては自由にアクセスできない場合もあるかと思いますが、ご自身のパソコンから共有フォルダにあるエクセルファイルへアクセスし、マクロ処理する場合のコードを掲載します。

Workbooks.Open Filename:=”ここにアクセスしたいファイルのパスを記載します。”

最後に

この目的別コードはVBAを使って自分なりに処理するコードを書きたい場合に役立ちます。

初めてVBAに取り組む場合には難しく感じると思いますが、
3回までにはなりますがご質問に対応させていただきます。

楽するところは楽していただいて、時間を作るお役に立てれば幸いです。

また、VBAの考え方やコードのヒントなどをX(旧Twitter)でポストしていきます。
そちらも見ながら学んでみてください。