• ベストアンサー

VBA 各セルの文字を処理した結果を配列に入れる

以下のコードはどう書いたら良いかお教えください。 ・セルA1からA5に対して(ユーザーが任意に選んだ範囲で、その都度変わります) ・各セルの文字に”あ”が含まれていたら、削除します(”いあう”⇒”いう”) ・各セルに対して処理した結果をC(1,1)~C(5,1)の配列に入れたい

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

  • ベストアンサー
回答No.1

・セルA1からA5に対して(ユーザーが任意に選んだ範囲で、その都度変わります) 現在選択中の物を取得するselectionを使ってください。 Dim r as Range Set r=Selection ・各セルの文字に”あ”が含まれていたら、削除します(”いあう”⇒”いう”) rangeオブジェクトのreplaceメソッドを使ってください。 Dim r as Range Set r=Selection Call r.Replace("あ", "") ・各セルに対して処理した結果をC(1,1)~C(5,1)の配列に入れたい Option Base 1 を最初に宣言すると、配列の始まりは1になりますので、あとはVariantの配列変数に代入すれば配列で取得できます。ただ、選択セルが1セルの場合はエラーになりますのでエラー処理が必要です。 Dim r as Range Dim c() As Variant Set r=Selection Call r.Replace("あ", "") On Error Resume Next c = r.Value If Err.Number <> 0 Then ReDim c(1, 1) c(1, 1) = r.Value End If On Error GoTo 0

VitaminBB
質問者

補足

回答ありがとうございます。 c(1,1)・・・1なのに何個も配列が出来るのですね。不思議です。 最後のデータc(n,1)のnを調べるにはどうすればよいのでしょうか? 何度もすみませんが、よろしくお願いいたします。

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

簡易には sub macro1()  dim a as variant  dim i as long  a = selection.value  for i = 1 to ubound(a)   a(i, 1) = replace(a(i, 1), "あ", "")  next i end sub のような具合でもできます。 添付に回答マクロの実行結果を示します。 ただし >ユーザーが任意に選んだ範囲で これをどこまで「自由に」認めるかによって,もうちょっと細工が必要な場合も考えられます。 実際にどういう状況でご相談のような事をしたいのか,現実にアナタがヤリタイ事に応じて更に工夫してください。

VitaminBB
質問者

お礼

回答ありがとうございました

回答No.3

#1です。 >c(1,1)・・・1なのに何個も配列が出来るのですね。不思議です。 ちょっと違います。 r.value の型は2セル以上で2次元配列、1セルの時は文字列となり、処理を統一するためにわざわざc(1,1)を作って文字列を入れる必要があります。 #1のコード以外にも redim c(r.rows.count,r.columns.count) for i=1 to r.rows.count for j=1 to r.columns.count c(i,j)=r(i,j).value next j next i のようにしてもよいのですが、選択範囲がかなり大きくなると時間がかかるようになるので#1のコードの方がお薦めです。 >最後のデータc(n,1)のnを調べるにはどうすればよいのでしょうか? 配列cのn次元目の最大要素は Ubound(c,n) を使います。この場合、n=1で Ubound(c,1) もしくは r.rows.count でも同じ結果が得られます。 配列の最小は1ですが以下でもOK Lbound(c,1)

VitaminBB
質問者

お礼

回答ありがとうございました 理解できました。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

Dim c As Variant, x As Range, key As String Dim cnt As Long, i As Long key = "あ" cnt = Selection.Cells.Count ReDim c(1 To cnt, 1) For Each x In Selection i = i + 1 c(i, 1) = Replace(x.Value, key, "") Next x これでどうですか?

VitaminBB
質問者

お礼

回答ありがとうございました

関連するQ&A

専門家に質問してみよう