• 締切済み

EXCEL A列の値を受けてB列に出力するロジック

A列の値を受けて、B列に出力するVBAを組みたいと考えています。 ロジックが思いつきませんので、お助け下さい。 A列に一の位が必ず1の数字が入っています。 それをB列に1~10まで展開します。 それが終われば、A列の次の値をB列に入力、 同じように、B列に1~10まで展開します。 それをA列の最後の値まで繰り返します。 最終的にはA列に入力されている個数の10倍の個数がB列に出力されることになります、 以上の処理です。 A   B    C   D   E   F   G 1   31   31 2   61   32 3   81   33 4   11   34 5   ・   35 6   ・   36 7   ・   37 8   ・   38 9   ・   39 10   ・   40 11   ・   61 12   ・   62 13   ・   63 A列の値の個数は多いので、できるだけ早く動作するような処理方法がわかればと思います。 よろしくお願いします。

みんなの回答

回答No.4

下記のように作成してみました。 処理速度は早くなっていると思います。 >Dim i, j, k, z As String この表記は正しいようで正しくありません。 Stringは文字列ですし、4つ宣言しているようで宣言されていません。 Dimの使い方について調べてみると勉強になるかと思います。 Sub SAMPLE() Dim Z As Long, I As Long Application.ScreenUpdating = False Columns(2).ClearContents Z = Range("A65536").End(xlUp).Row For I = 1 To Z Cells(I * 10 - 9, "B").Value = Cells(I, "A").Value Next I With Range("B1:B" & Z * 10) .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C+1" .Value = .Value End With Application.ScreenUpdating = True End Sub

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

こんな感じのはどうですか B列の行でループを回して、その行数に応じた元セルの値と、元セルに幾つ加算するかを得て、セルに入れています。 Sub sample()  Dim nRow As Long  Dim nTargetRow As Long '元セル  Dim nPlusRow As Long '加算数  Application.ScreenUpdating = False  nRow = 1  Do   nTargetRow = Int((nRow - 1) / 10) + 1   nPlusRow = (nRow - 1) Mod 10   If Cells(nTargetRow, 1) = "" Then Exit Do   Cells(nRow, 2)= Cells(nTargetRow, 1) + nPlusRow   nRow = nRow + 1  Loop  Application.ScreenUpdating = True End Sub

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

一応作ってみたけど Sub test() Dim z, j As Variant Dim i, k As Long z = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)) j = Range(Cells(1, 2), Cells(UBound(z, 1) * 10, 2)) For i = 1 To UBound(z, 1) For k = 0 To 9 j((i - 1) * 10 + k + 1, 1) = z(i, 1) + k Next k Next i Range(Cells(1, 2), Cells(UBound(j, 1), 2)).Value = j End Sub 参考まで

回答No.1

A列に一の位が必ず1の数字が入っています とありますが、例を見ると一の位が2の値 例えば A2のセルがあるようですが、 質問の意味を追記頂けないでしょうか?

excell
質問者

お礼

Dim i, j, k, z As String z = 9000 For i = 1 To z j = 10 * (i - 1) + 1 Range("B" & j).Value = Range("A" & i).Value For k = 1 To 9 Range("B" & (j + k)).Value = Range("B" & j).Value + k Next k Next i なんとか自分で考えてコード作ってみましたが、処理が遅いです。 配列処理にするにはどうしたらよいのでしょうか?

excell
質問者

補足

すいません。 行が段ずれしてます。     A   B    C   D   E   F   G 1   31   31 2   61   32 3   81   33 4   11   34 5   ・   35 6   ・   36 7   ・   37 8   ・   38 9   ・   39 10   ・   40 11   ・   61 12   ・   62 13   ・   63

関連するQ&A

専門家に質問してみよう