• ベストアンサー

エクセルのマクロ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 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.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

ann1
質問者

お礼

ありがとうございました!! できました。まさにその方法で、abcを判別していたので、思っていたとおりのコード文です! ifとmidの組み合わせなどで、どうしてもエラーになって困っていました。 ありがとうございました!!(^^)/

その他の回答 (2)

noname#8445
noname#8445
回答No.2

データが1列だけでしたら dim Aretu_backup as string と変数(記憶エリア<架空セルと思ってください>)を持たせて、 全てのチェックPGMのあとに前データ比較用として 代入し、次の処理のときにチェックしてあげれば いいのではないでしょうか Aretu_backupは短い言葉でも良いです 予約語(sub)などは使えません マクロはループ(回す処理ですよね) 確認の為

ann1
質問者

補足

何度もありがとうございます。 初心者なものですみません。 >前データ比較用として代入し、次の処理のときにチェックしてあげれば チェックするコードを知りたいです。 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    よろしくお願いいたします。

noname#8445
noname#8445
回答No.1

acの時があるとはいうものの 6  99333345 (N) 2番目に"-"がありませんよ。 ちょっとわからないかな

ann1
質問者

補足

回答ありがとうございました。 わかりにくくてすみません。 >並び順は、c(複数)の上に必ず、abがあるはずですが、不規則にbが無くて、acの時があります。 通常は1~3行目の様な繰り返しで、abcccccabcc・・・ 等と並んでいるのですが、5・6行目のように、acと並ぶ時があります。 >ここで、データがacの順に並んでいる時だけ(6・7行 間違えてました。 ×6・7行目 ○5・6行目 >目)、cの入っている方の行(7行目)B列に"N"を入れたい感じです。 間違い ×7行目 ○6行目 よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう