• 締切済み

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

  • B列の値がA列にあるかを調べる関数

    excel2010を使っています。 題名の通りなのですが、B列にある値がA列にあるかを関数を使って求めたいと思います。 B列に290個、A列に259個の値が入力されていて、 ・B列にあってA列にないもの ・A列にあってB列にないもの の両方を見つけ出したいのですが、よい関数を教えてください。exact関数ではダメでした。

  • VBA2010,B3の値が変わったら、A3に

    VBA2010で,B列の値が変わったら、A列の同じ行に前日の日付を入力するには、マクロコードをどのように書けばよいですか?B列データ入力範囲はB3~B65536 尚、B3~B65536にはVLOOKUPで、他のブックから値を参照しています。 最後にA列の同じ日付セルを結合し、I列、P列、W列の同じ行に結合したセルをペーストたいのです。 宜しくお願い致します。

  • エクセルで同じ数字が連続している個数を関数でセルに出力

    A列に1かー1かいずれかの数字が入力されているとき、その行から上方に数えて、B列には1の連続している個数を、C列にはー1の連続している個数を出力したいのです。例えば A列    B列    C列 1      1     0 1      2     0 -1    0     1 -1    0     2 -1    0     3 といった具合です。 この時、B列、C列にはどのような関数を入力すればよいでしょうか。

  • A列 B列

       A列 B列  1  1 Aさん  2  2 Bさん  3    Aさん  4  1 Bさん 上記の表のような場合、Aさんの合計は、1です。 数字が入力されている件数は、1件です。 Bさんの合計は、3で、数字の入力されている件数は、2件あります。 このように、Aさんの合計および、数字が入力されている箇所の件数を抽出するには、 どのようなエクセルの式を入れるといいですか? 昨日から、何度もすみません‥(下矢印)宜しくお願いします。

  • EXCELで範囲内にある値を検索してA列の値を返す

    タイトル通りなのですが、OSはXPでEXCEL2000を使用しています。 シート内ですが 1.A列には文字列が入っています。200行まで空白は無いです。 1.B列からL列の200行までに数字がランダムに入っています。 2.数字は1~500までです。 3.行によってはL列まですべてのセルに値が入ってません。  数字の入っていないセルは空白です。 4.数字の重複はありません。 やりたいことは 別のシートのA列に1~500までの数字を入れ、B列に上記範囲の中からその数字を検索して、その行のA列の値を返したいのですが、出来ません。 どの関数を組み合わせれば出来るのでしょうか? vlookupの検索範囲は1列だけなのでダメでした。 よろしくお願いします。

  • エクセルにてA1に1と入力したらB1の値を表示

    エクセル初心者です セルのA1に数字の1を入力するとB1の値が表示、A2に数字の2を入力するとB2の値が表示されるようなものを作りたいのですが・・・ どなたかご教授お願いします 例えば、A1に1を入れるとB1の値"北海道" A2に2を入れるとB2の値"青森"といった感じでです 宜しくお願いいたします

  • Excelの値貼り付けについて

    Excelの値貼り付けについて   A列  B列 1   1 2       2 3   3 4       4 5   5 6       6 7   7 8       8 9   9 10      10 A列・B列の1~1000行にランダムに数字が入力されており、A列の値を残したままB列の数字をA列に追加したいです。 同じ行でA・Bどちらにも数値が入力されていることはありません、かならずどちらか一方です。 関数を使わないと出来ないでしょうか? 検索してみましたが、見つからないためどうか宜しくお願い致します。

  • A列にもB列にもある値が知りたい!!

    おねがいします! A列にもB列にもある、同じ値が何件でどれなのか知りたいのですが、 どういった方法が手っ取り早いでしょうか?

  • エクセル A1の値と同じ値の入ったB列のC列の計

    A1=10 D1=37 B C 10 15 11 10 10 12 12 1 10 10 A1と同じ値をB列から探し其の行のC列の値の合計をD1に表示したいのです ご教授ください

  • EXCELのマクロにて、ゼロパティングをしたい

    A列とB列に3バイトと4バイトの数字がずらっとはいっています。 A列の数値はA2からB列の数値はB2から入っています。、 A列には1ケタから3ケタまでの数が入り、桁数が足りない場合はゼロパティングします。 B列同じです。 やりたいことは、A列とB列の値を縦のセルごとに最終レコードまで結合していきたいのです。 これをVBAでやりたいのです。 入力値によって0の個数が変わる場合の処理がどうしても思い浮かびません。 どなたか知恵を貸していただきたいです。 過去ログに似たようなものがあったのですが、なかなか考えられませんでした。

専門家に質問してみよう