内容
エクセル マクロを組む
まずは最初に覚えること セルとシート(0)
マクロがあるからエクセルを使う人も多いと思います。
マクロを使うことで、数値を計算したり、値を取得して更に編集したりすることができます。
解説動画
・セルを指定
Cells(1,1).Value = “セル”
Range(“A1″).Value=”レンジ”
・セル指定の例
Range(“A1,C5”)「A1」セルと「C5」セル 複数の単一セル
Range(“A1:C5”)「A1~C5」セル セル範囲
(抜粋)
http://www.atmarkit.co.jp/ait/articles/1402/24/news108.html
・シートを指定
Worksheets(“Sheet1”).Activate
Worksheets(“Sheet1”).Range(“A3″).Value=”sheet-A3”
参考URL
http://excelvba.pc-users.net/fol2/2_1.html
http://www.atmarkit.co.jp/ait/articles/1402/24/news108.html
#E2 エクセル マクロ リピート繰り返し文(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
'・For文 Dim i as Long For i = 1 to 10 STEP 1 Cells(i,1).value="aaa" NEXT i '・Do While文 Dim a as Long a=0 Do While a < 10 a = a + 1'無限ループに注意 Cells(a,3).value="bbb" if a = 3 then exit Do Loop '・For Each文 Dim lCount As Long Dim v As Variant Dim listArray As Variant 'Dim longArray() As Long を使用してlongArray = Array(1,3,5)とするとエラーになるので、この場合はvariant型が必要 listArray = Array(1, 2, 3, 4, 5) lCount = 1 For Each v In listArray Cells(lCount, 4).Value = CStr(v) lCount = lCount + 1 If v = 4 Then Exit For Next v |
参考
http://home.att.ne.jp/zeta/gen/excel/c04p21.htm
intとLongはどちらを使うべきかは、Longのほうが扱える数が大きく処理が早いそうです。
Integer型、-32,768 ~ 32,767
Long型、-2,147,483,648 ~ 2,147,483,647
エクセル マクロ、IF文条件文(1)
基本
if then
elseif then
end if
・IF文
Dim a As String
if a= “あ” then
else
End if
IF a=”あ” then
elseif a=”い” then
End IF
・AND、OR
if a= “あ” AND b = “か” then
else
End if
if a= “あ” OR b = “か” then
else
End if
参考サイト
http://home.att.ne.jp/zeta/gen/excel/c04p20.htm
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub ifbun() Dim strA As String Dim strB As String strA = "a" strB = "b" 'A1セルにa,B1セルにbが入力されている状態の比較 If strA = Cells(1, 1).Value Then Cells(1, 3).Value = "OK" End If 'else If strB = Cells(1, 1).Value Then Cells(1, 3).Value = "OK" Else Cells(1, 4).Value = "NO" End If 'AND If strA = Cells(1, 1).Value And strB = Cells(1, 2).Value Then Cells(1, 5).Value = "OK" End If 'OR If strA = Cells(1, 2).Value Or strB = Cells(1, 2).Value Then Cells(1, 6).Value = "OK" End If End Sub |
エクセル マクロ、条件文、Case(Select Case)文
C言語ならswitch caseですね。
int atai =1;
switch (atai) {
case 1:
処理;
break;
case 2:
処理;
break;
default:
処理;
}
エクセルのマクロではSelect Case文です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
・Select Case Dim a As Long a = 3 Select Case a Case 1 Cells(1, 1).Value = 1 Case 2 Cells(1, 2).Value = 2 Case 3 Cells(1, 3).Value = 3 Case Else End Select ' a = 4 Select Case a Case Is > 5 Range("A3").Value = "5より大きい" Case 1 To 4 Range("A3").Value = "1から4の範囲" Case Else End Select |
参考サイト
http://excelvba.pc-users.net/fol6/6_2.html
エクセル マクロ 配列(3)
<ポイント>
Variant型は、要素数を指定すると格納するとき配列のように扱う
Dim mList(100) As Variant
mList(0) = “a”
しかし、要素数を指定しない場合は、
Dim vList As Variant
格納はvList = Array(“v”,”c”)となる
vList(0) = “c” 配列のように格納できない
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Dim List As Variant '格納する数を指定しなくてもRedimで変更できる Dim vList As Variant '格納はvList = Array("v","c") しかし、vList(1) = "c" 配列のようにできない Dim mList(100) As Variant ' mList = Array("a") だとエラーになる Dim List() As String Redim mList(150) '宣言時に要素数を指定しているのでエラーになる ReDim List(100)'要素数を指定していないのでエラーに成らない ReDim Preserve List(110)'配列の内容を初期化せずに増やす List(0) = "a" Cells(1, 1).Value = List(0) vList = Array("v","c") '初期化で 次にvList = Array("e","g")と追加できず。前回のvcは消えるので注意。挿入されていない。 'エラー vList(1) = "c" 配列のようにできない '取り出すときはvList(1)とできるのに mList(0) = "a" 'mList = Array("a") 'エラー Variantであっても配列()にしたときは mList(0) = "a" とする Cells(2, 1).Value = vList(0) bList(0) = "b" Cells(1, 2).Value = bList(0) |
参考
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm
エクセル マクロ 数字かどうかを判別 ISNUMERIC
ISNUMBER は、ワークシート関数
ISNUMERIC は、VBAで使用する関数
ただし、IsNumericは全角の数字も数字としてTrueを返します。
10(文字) TRUE
10(数値) TRUE
“10” TRUE
参考
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=742&rev=&no=0&P=R&KLOG=8
‘全角数字
if IsNumeric(“123”) then
cells(1,1).value=”数字です”
end if
‘半角数字
if isNumeric(“123″) then
cells(1,2).value=”数字です”
end if
注意、空白の場合もTRUEを返すために、CStrで文字列にしてから判別する
IsNumeric( CStr( cells(2,1).Value ) )
‘Cells(2,1)は空白
またはそのセルが空でないとするAND判定
IsNumeric(Cells(2,1)) And Not IsEmpty(Cells(2,1))
IsNumeric(Cells(2,1)) And Cells(2,1).value <> “”
としてする
参考
http://veaba.keemoosoft.com/2012/12/322/
#E-S-1 エクセル マクロ 同じ数値が2つの列に存在するかチェック End(xlDown).Row
・列のIFチェック
A列に数値(生徒の登録番号)が数行入力されていて、B列にもA列と似た数値(A列と種類は同じ)が入力されていて、A列とB列には重複の数値がない状態にしたいときに、同じ数値が2つの列に存在するかチェックする
・例 A、B列の行数は同じではない。A、B列内での同じ数値は存在しない
A列
123
456
789
790
・B列
122
456(A列にも存在するので、この行で判定させたい)
788
エクセル動画
・マクロ作成の概要、方針
総当りで判別
A列の1行目をB列の全行でチェック。
次にA列の2行目をB列の全行でチェック。
以下同様にチェック
1.A列、B列の行数を取得
Dim idownA As Long
Dim idownB As Long
idownA = Cells(1, 1).End(xlDown).Row ‘行数を取得ActiveSheet.Range(“A1”).End(xlDown).Row
2.総当りで判別
3.該当の数値のセルに色をつける
Range(“A1”).Font.Color = RGB(255, 0, 0) ‘ 文字色
Range(“A1”).Interior.Color = RGB(200, 200, 200) ‘ 背景色
参考URL
http://www.tipsfound.com/VBA/07006.vbhtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub test1() Dim idownA As Long Dim idownB As Long '行数を取得 idownA = Cells(1, 1).End(xlDown).Row 'A列に数値が何行入力されている idownB = Cells(1, 2).End(xlDown).Row 'B列に数値が何行入力されている Range("D1").Value = "Aの行数" + CStr(idownA) Range("E1").Value = "Bの行数" + CStr(idownB) For i = 1 To idownA Step 1 For f = 1 To idownB Step 1 If Cells(i, 1).Value = Cells(f, 2).Value Then Cells(i, 1).Interior.Color = RGB(200, 200, 200) Cells(f, 2).Interior.Color = RGB(200, 200, 200) End If Next f Next i End Sub |
VLOOKUPの使い方、データを参照、検索
VLOOKUP(検索値,範囲,列番号,検索方法)
例
VLOOKUP(A2,F:G,2,0)
引数
検索したいセル、セルの範囲、検索によって入力したセルの範囲の列番号、検索方法
になります。
文章では説明しにくいのですが、
簡単にいえば、A2とセルの範囲の中の値が一致した時に列番号の値が入力されます。
番号と商品名、書籍名の一覧表があって、商品や本には番号がふってあるだけで、それがどんな商品名や書籍名なのかわかりません。でも一覧表があればそれを見ながら確認できます。でも数が多いとちょっと面倒です。
マクロを使うので、一気に番号と商品名や書籍名がわかることになります。
検索方法
0:FALSE 完全一致
1:TRUE あいまい
IFERROR(VLOOKUP(A2,F:G,2,0),””)
とすることで、エラーに成ってもブランクにすることができます。
参考HP
http://www.itc.u-toyama.ac.jp/el/spreadsheet/vlookup.html