• ベストアンサー

どのようなVBAを書けば良いのでしょうか

以下のようなデータがあります。 ?の部分はランダムな値が入っていると考えて下さい。 A列 B列 C列 D列 E列 F列 ?  ?  ?  ?   ?  ? ?  ?  ?  ?   ?  ? ?  ?  ?  ?   ?  ? 「  「   「   「    「   「 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 」  」    」   」    」   」 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 「  「  「   「    「   「 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 」  」    」   」    」   」 ?  ?  ?  ?    ?  ? 以下不規則にデータは続く このデータの「」と「」内のデータを消したいのです。 正確に言えば、セルを削除して、上方向にシフトしたいのです。 つまり、上の例からすると A列 B列 C列 D列 E列 F列 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?   ?  ? 以下不規則にデータは続く のような形に加工したいのです。 ただセルを削除して、上方向にシフトするには、 オブジェクト.Delete Shift:=xlShiftUp を使えば良いことまでは分かりました。 しかし、求める形にデータを加工するには、どのような制御構造を書けば良いのか、正直手詰まりです。 VBA初心者のため、アイデアに限りがあって…。 分かる方、お手数をおかけしますが、よろしくお願いします。

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

  • ベストアンサー
  • k-pix
  • ベストアンサー率51% (50/98)
回答No.2

まず、ご質問の意図ですが、サンプルのデータが"?"で書かれていますので、実際にどこを消去するかが曖昧です。"?"をそれぞれ違った値で書かれると、ご質問の意図がわかりやすいのではないでしょうか? とりあえず、 『列方向に走査して、"「" ~ "」" 間のセルを削除する。』 という意味だと解釈します。 また、列方向の走査は空白セルが出現した時点で次の列の走査に移ることとし、その最初のセルが空白セルの場合、処理を終了することとします。 その他の条件の場合は、適宜アレンジをお願いします。 Option Explicit Private Const STATE0 As Integer = 0 Private Const STATE1 As Integer = STATE0 + 1 Private Const STATE2 As Integer = STATE1 + 1 Public Sub TrimCells() Dim iState As Integer Dim i, j, k As Integer Dim ib, ie As Integer i = 1 j = 1 iState = STATE0 Do While (ActiveSheet.Cells(i, j) <> "") Do While (ActiveSheet.Cells(i, j) <> "") Select Case iState Case STATE0 If ActiveSheet.Cells(i, j) = "「" Then ib = i iState = STATE1 End If Case STATE1 If ActiveSheet.Cells(i, j) = "」" Then ie = i iState = STATE2 End If End Select If iState = STATE2 Then For k = ib To ie ActiveSheet.Cells(ib, j).Delete Shift:=xlUp i = i - 1 Next iState = STATE0 End If i = i + 1 Loop j = j + 1 i = 1 Loop End Sub

type-RRR
質問者

お礼

分かりにくい質問をして誠に申し訳ないです。 サンプルのデータを?を使ったほうが表現しやすいかと思ったのですが、かえって誤解をまねく表現になってしまったようです。 私の表現したかったことは、正に 『列方向に走査して、"「" ~ "」" 間のセルを削除する。』 という意味でした。 理解しにくい質問を解釈し、また、素晴らしいVBAを書いていただき、本当にありがとうございます! 「列方向に走査してから、次の列の走査に移る」という発想が無かったので、目からうろこが落ちる思いです。 k-pixさんの書かれたVBAを勉強して、自分の力に変えていきたいと思います。 繰り返しになりますが、本当にありがとうございました!

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

ご質問を読んでもデータ構造を理解出来ませんでした。 理解出来ても答えられるかは解りませんけど、、、 ? はそれぞれのセルにひと文字ずつ入っている事を意味してるのでしょうか? 「 と 」 は何処と何処のセルが対になっているのでしょうか? (A4の " 「 " と F7の " 」 " で対なのか、A4の " 「 " とA7の " 」 " で対なのか)

type-RRR
質問者

お礼

理解しにくい質問をしてしまい、申し訳ございません。 ?の部分には、実際には一ケタから十二ケタ程度の数値がランダムに入っており、元のデータをそのまま質問板に書くととても見にくくなってしまうので、?を使ったのですが、かえって誤解をまねく表現になってしまったようです。 しかも、papayukaさんの御指摘どおり、「と」の対も説明不足でした。すいません。 A4の " 「 " とA7の " 」 " で対 のつもりでした。 質問の意図が伝わりやすい表現ができるよう、以後気をつけたいと思います。すいませんでした。