For i = 5 To intRow
Range("C" & i).Select
If Len(Range("C" & i)) > 6 And Len(Range("C"
& i)) < 10 Then N=N+1
' i=5の時は、C5の文字数を数えて 6 より大きくて、かつ 10 より小さい時 N は N+1 になる。
' これは変更を要する行が、何ヶ所あるのかを数えている。
' A1-15.16 のように二つの品番が一つに書かれているので、書き直すには2行になるので、1行
' を追加することになる。N は追加の行数を示している。
' これは For i=5 To intRow + N の様に、intRowの値よりも行数が増えているから、その増加
' した行数が N 値である。
Next
For i=5 To intRow+N ' intRow+増加する行数を見込んでいる。
Range("C" & i).Select
If Mid(Range("C" & i), 3, 1) = "−" And Mid(Range("C"
& i), 6, 1)="." Then
' i=5 の場合は、C5の文字列の3文字目が "−" で、C5の文字列の6文字目が "."
なら
intLen=Len(Range("C" & i)) ' C5の文字数を数えて intLen に代入する。
If intLen=8 Then ' C5の文字数が8なら
intBun=2 ' 数量を2分割する。
strHin=Left(Range("C" & i), 2) ' C5の左から2文字目を strHin に代入する。
strHin2=Mid(Range("C" & i), 4 , 2) ' C5の4文字目から2文字を
strHin2 に代入する。
strHin3=Mid(Range("C" & i), 7 , 2) ' C5の7文字目から2文字を
strHin3 に代入する。
strSeib=Range("B" & i) ' B5を strSeib に代入する。
intSu= Range("G" & i) ' G5を intSu に代入する。
intSu2=intSu / intBun ' intSu ÷ intBun を intSu2に代入する。
strTex1= Range("E" & i) ' E5 を strTex1 に代入する。
strTex2=Range("F" & i) ' F5 をstrTex2 に代入する。
Range("D" & i).Value=strHin2 ' D5に strHin2 を代入する。
Range("B" & i+1 & "G" & i+1).Select
' B6:G6を選択する。
Selection.EntireRow.Insert. CopyOrigin:=xlFormatFromLeftOrAbove
' 選択範囲に行を挿入する。
Range("B" & i + 1).Value = strSeib ' B6に strSeib を記入する。
Range("C" & i + 1).Value = strHin ' C6に strHin を記入する。
Range("D" & i + 1).Value = strHin3
Range("E" & i + 1).Value = strTex1
Range("F" & i + 1).Value = strTex2
Range("G" & i + 1).Value = intSu2
Range("C" & i ).Value = strHin ' C5に戻って品番1を記入する。
Range("G" & i ).Value = strSu2 ' G5に戻って数量を記入する。
Range("C" & i).Select
End If
End If
Next
End Sub
このプログラムを改造すれば、A10−11.12やA1−12.13.14のような三つの品番にも対応できる。
この図の様に、間違いの C列を、C列とD列に分割している。
又、新規の行を挿入して2行に記入し、G列の数量も2分割して記入している。
● データベースの行をすべてチェックして、問題のある行を修正するのが下記のプログラムである。
C5とC7に本来の入力書式ではない入力がされて、データベースに保存された。
何ヶ所に問題があるか分からないので、データを使用して集計などを行う場合に都合が悪い。
●データベース内の、品番入力が間違っているものを自動で変換して修正する。
基本的なマクロの習得
データベースの入力間違いを自動修正
実際に使っているシステムの内容で解説
EXCEL VBA 講座