


;intRow=Range("B3").End(xlDown).Row ' B3列にどれだけのデータがあるのか分からないので、最終端を
' 調べるコードです。
' End(xlDown) は上から調べて、最下行のデータが入り、その
' データの行番号を調べるのが Rowである。
' 但し、データに空白行がある場合は、その空白行の一つ上が
' 認識される。だから、空白行の含まれるデータベースの場合は
' 空白行を取り除いておくか、(xlUp)を使用することになる。
intRow=Range("B100").End(xlUp).Row ' この場合は、これ以上データが無いと思える下位置を指定して
' そこから上にデータのある行を検索する方法で、データの間に
' 空白行があっても検索できる。
Total=0 ' Total変数を0にしておく。
For i=4 to intRow ' 繰り返し同じ処理をする場合は、For _ Next を使用する。
' i は4からintRowまで繰り返し、For から下に実行して、
' Next に達すると、For に戻る。その時にi の値が1繰り上がる。
' i が intRowの値になると For _ Next から抜け出して、次の
' 構文に進む。
' intRow=20の場合は、i が20になるとFor_Nextは終わる。
S=Len(Range("C" & i)) ' i=4の場合は、C4セルの文字数を数えて、Sに代入する。
St2=Range("C" & i) ' i=4の場合は、C4セルの文字列を、St2に代入する。
Range("C" & i).Value=RTrim(St2) ' St2の文字列の右端のスペースを削除してC4に書く。
' これは、スペースが入っている可能性を考慮している。
D1=Left(Range("C" & i),M) ' Mは抽出条件のNK-1234の文字数 7 である。
' i=4の場合は、C4の文字列の左から7個をD1に代入する。
' データの中には、文字列が6の場合も8の場合もあるので、
' 左から7文字だけをD1に取り出している。
' この構文は、実際に7文字が抽出されるかを確かめる為にある
' ので不必要である。
If strSeib=Left(Range("C" & i),M) then ' 抽出条件のstrSeibとC列から抽出した7文字が同じかを比較して、
' 同じ場合は次の処理を実行する。違うならEnd If にジャンプする。
Tot=Range("B" & i) ' 同じ場合は、B列の i の値をTotに入れる。
Total=Total+Tot ' 同じ場合は、TotalにTot が加算される。
End If ' If _ ThenからEnd Ifまでの条件分岐が終わり。
Next ' For _ Next の繰り返し点。
End Sub ' マクロの終了。
●実際の抽出データ
抽出条件 NK-1234
10行目 NK-1234B Tot=1070 Total=1070
11行目 NK-1234 Tot=1080 Total=2150
19行目 NK-1234K Tot=1160 Total=3310
●データベースに含まれる、空白行の削除方法
1. 空白行が含まれるデータベースから空白行を削除する場合で、データを並べ替えても良いデータベースは、
全体を降順ソートすればよい。空白行が下に行き、データ最下行の行番号が取得しやすくなる。
2. 並べ替えのできないデータベースの空白行を削除するには、どれかセルに空白の入らない列を、上から順
に下へ調べて行くしかない。
B列を基準にする場合(空白セルのない様に見える列)
intRow=Range("B10000").End(xlUp).Row ' 最下行を所得する。
For i=4 To intRow ' 4からintRowまで
If Range("B" & i)="" Then Range("A"
& i & ":E" & i).Delete ' 空白なら削除する。
Next
●空白に見えるセルの種類と構文
1. 何も入っていない完全な空白 ""
2. 半角スペースの入っている空白 " "
3. 全角スペースの入っている空白 " "
●スペースの入る可能性がある場合は、3種類とも削除しなければならない。
例) If Range("B" & i)="" Then Range("A"
& i & ":E" & i).Delete
If Range("B" & i)=" " Then Range("A" & i & ":E" & i).Delete
If Range("B" & i)=" " Then Range("A"
& i & ":E" & i).Delete
●製番を指定して、同じ製番に関連する金額を合計する。
Dim St As String ' Stを文字列として定義する。
St=Range("B2").Varue ' B2セルの値を変数 St に代入する。
Range("B2").Value=RTrim(St) ' 文字列 St の末尾のスペースを
' 削除して、B2セルに書く。
(スペースなしに書き換える。)
M=Len(Range("B2") ' B2の指定製番の文字数を数えて
' Mに代入する。
If M>=7 Then ' Mの文字数が 7 か 7 より大きい場合
St=range("B2").Value ' B2も値を変数Stに代入する。
Range("B2").Value=RTrim(St) ' B2の右端のスペースを削除して
' B2に代入する。
strSeib=Range("B2") ' B2の値をstrSeib変数に代入する。
M=Len(Range("B2")) ' B2の文字数を数えてMに代入する。
'
1. 抽出条件の製番の文字数を数える。(NK-1234は7文字である。)
2. と言うことは、抽出条件の文字数が8文字の場合は、左から7文字がNK-1234であり、右に識別文字が
付いていることになる。
3. だが、入力時にNK-1234の後にスペース(空白)を挿入してしまったかもしれない。
4. スペースが挿入されていたら、スペースも含めて8文字と認識される。
5. と言うことは、8文字の製番を検索すると、右端がスペースで8文字でも抽出されることになる。
6. だから、文字列の操作には、空白に対する注意も必要になる。
(入力担当者が、うっかりとスペースを押して、空白を入力するかもしれない。)
● 文字列に入力されたスペース(空白)を削除する方法
文字列先頭のスペースを削除する構文 LTrim(String) ' Stringは指定の文字列を指す
文字列末尾のスペースを削除する構文 RTrim(String)
文字列先頭と末尾のスペースを削除する構文 Trim(String)
●データベースの中から、必要なデータを抽出する。
データベースの中から、同じ製番の、仕入合計値の算出が
必要になった場合に、使用している製番の一部を取り出して、
データをよく見てみる。
1. 右端に識別コードが付く分類の場合、付くものと、付かな
いものとがある。
2. 右端の識別文字を除いた製番の、文字数が6文字と7文字
がある。
3. 識別文字はAからZまであるかもしれない。
●この状態で、NK-1234とNK-1234Bの様に識別文字が付く
製番の合計値を算出する場合に、同じ製番だけをどの様に
抽出するのか。(ちなみに、一つの製品には一つの製造番号が
付くのが普通であるが、その製品の部品を取り換えたり、
調整する必要が生じた場合に、掛かった費用は別で知りたい。
だから、製造番号は変わらないが分類番号は変わる。)
基本的なマクロの習得
文字列操作
実際に使っているシステムの内容で解説
EXCEL VBA 講座