- ベストアンサー
エクセルのマクロVBA条件分岐の仕方
適切な方法を知りたいと思っています。よろしくお願いします。 エクセルA列に A列 B列 C列 1行 E-000-1 2 2000-0001 3 00300000 4 34598291 5 R-000-1 6 99333345 7 00300 8 2009-0013 9 47539859 10 0192 1・5行目のようにアルファベットで始まり"-"が2番目にある文字列("a"とします)、2・8行目のように"-"が5番目にある文字列("b"とします)、その他1~8桁の文字列("c"とします)が合計で5千件近く入っています。(abcは重複することもあります。) cより上にあるaとbはcの属性です。エクセル上で、 abcをそれぞれのCBA列に分けて行ごとにcの属性を出そうとしています。 並び順は、c(複数)の上に必ず、abがあるはずですが、不規則にbが無くて、acの時があります。そのときはb情報はないので、B列をNにしたいのです。 マクロで以下のような表にまで加工しました。 ここで、データがacの順に並んでいる時だけ(6・7行目)、cの入っている方の行(7行目)B列に"N"を入れたい感じです。 A列 B列 C列 1行 E-000-1 E-000-1 2 2000-0001 2000-0001 3 00300000 4 34598291 5 R-000-1 R-000-1 6 99333345 (N) 7 00300 8 2009-0013 9 47539859 2009-0013 10 0192 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 通常は1~3行目の様な繰り返しで、abcccccabcc・・・ > 等と並んでいるのですが、5・6行目のように、acと並ぶ時があります。 1 E-000-1 a 2 2000-0001 b 3 00300000 c 4 34598291 c 5 R-000-1 a 6 99333345 c 7 00300 c 8 2009-0013 b 9 47539859 c 10 0192 c この例だと1~4はabcc、5~7はaccだけど、8~10は bcc では無い? 仕様が見えないけど、やりたい事はこんな意味? Sub aaa() i = 1 Do While Range("A" & i) <> "" If Mid(Range("A" & i), 2, 1) = "-" Then If Mid(Range("A" & i + 1), 5, 1) <> "-" Then Range("B" & i + 1) = "N" End If End If i = i + 1 Loop End Sub
その他の回答 (2)
データが1列だけでしたら dim Aretu_backup as string と変数(記憶エリア<架空セルと思ってください>)を持たせて、 全てのチェックPGMのあとに前データ比較用として 代入し、次の処理のときにチェックしてあげれば いいのではないでしょうか Aretu_backupは短い言葉でも良いです 予約語(sub)などは使えません マクロはループ(回す処理ですよね) 確認の為
補足
何度もありがとうございます。 初心者なものですみません。 >前データ比較用として代入し、次の処理のときにチェックしてあげれば チェックするコードを知りたいです。 B列とC列にbaをコピーするのは、"-"の位置で判別しloopをかけています。 最終的には以下の様な表にするのが目的です。 (行削除と下へコピーマクロは作成済み) A列 B列 C列 3 00300000 2000-0001 E-000-1 4 34598291 2000-0001 E-000-1 6 99333345 N R-000-1 7 00300 N R-000-1 9 47539859 2009-0013 R-000-1 10 0192 2009-0013 R-000-1 現状のマクロだと、B・C列下へコピーとabの行を削除をすると、6・7行目に4行目のbが入ってしまう状態です。 このマクロの前に、6・7行目を比較してNを入れられればと思っています。 質問文の訂正 また間違ってました。 ×8 2009-0013 ×9 47539859 2009-0013 ○8 2009-0013 2009-0013 ○9 47539859 よろしくお願いいたします。
acの時があるとはいうものの 6 99333345 (N) 2番目に"-"がありませんよ。 ちょっとわからないかな
補足
回答ありがとうございました。 わかりにくくてすみません。 >並び順は、c(複数)の上に必ず、abがあるはずですが、不規則にbが無くて、acの時があります。 通常は1~3行目の様な繰り返しで、abcccccabcc・・・ 等と並んでいるのですが、5・6行目のように、acと並ぶ時があります。 >ここで、データがacの順に並んでいる時だけ(6・7行 間違えてました。 ×6・7行目 ○5・6行目 >目)、cの入っている方の行(7行目)B列に"N"を入れたい感じです。 間違い ×7行目 ○6行目 よろしくお願いいたします。
お礼
ありがとうございました!! できました。まさにその方法で、abcを判別していたので、思っていたとおりのコード文です! ifとmidの組み合わせなどで、どうしてもエラーになって困っていました。 ありがとうございました!!(^^)/