;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 講座