• 締切済み

VBA必要な文字数だけ取得して

Excel 2007です。 VBAについてです。 A行にA1に「AA-01あああ」、A2に「AA-02いいいい」、A3に「AA-03ううううう」・・・・ と入っていたとします。 これをマクロ実行後、それぞれ「AA-01」、「AA-02」、「AA-03」という状態にしたいのですが、どのようにしたらうまくいくでしょうか。 「AA-01」といったように、この部分の文字数は変わらないので、私が考えたのはMid関数で、頭の5文字だけをセルに入れる。といった処理なのですが・・・。 うまく動かないのですが、現在できたところまで見ていただけると助かります。 Dim MaxRow As Long Dim MyRng Dim xtext MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row MyRng = Worksheets("Sheet1").Range("A1:A" & MaxRow) For Each xtext In MyRng Selection.Rng.Value = Mid(xtext,1,5) Next xtext わからないのは Selection.Rng.Value = Mid(xtext,1,5) の行で左辺をどのようにするのかで、その処理の時のセルの位置(?A1だとかA2だとか)を入れられたらよいかと思うのですが、どうやって取得するかがわかりません。 ご助力願います。 よろしくお願い致します。

みんなの回答

回答No.2

Excelのバージョンに依存しない最終行が解っているなら、そこまで「セル」でハンドルする。 Sub MacenRow() Dim MaxRow As Long Dim kk As Long MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row For kk = 1 To MaxRow Cells(kk, "A") = Left(Cells(kk, "A"), 5) Next kk End Sub

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

sub macro1()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)  if h <> "" then          ’無くても構わない   h.value = left(h.value, 5)  end if              ’同上  next end sub みたいな。 #勿論,65536行を越えて沢山のデータを処理したいのでしたら,あなたのマクロの書きぶりで備えます。

関連するQ&A

専門家に質問してみよう