#E1 エクセル マクロを組むまずは最初に覚えること セルとシート(0)

エクセル マクロを組む

まずは最初に覚えること セルとシート(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)

'・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

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文です。

・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” 配列のように格納できない

サンプル

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

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

こちらの記事もどうぞ