- 締切済み
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列の値の個数は多いので、できるだけ早く動作するような処理方法がわかればと思います。 よろしくお願いします。
- excell
- お礼率11% (6/52)
- オフィス系ソフト
- 回答数4
- ありがとう数1
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- abe_onesel
- ベストアンサー率52% (20/38)
下記のように作成してみました。 処理速度は早くなっていると思います。 >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)
こんな感じのはどうですか 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)
一応作ってみたけど 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 参考まで
- alesi_sato
- ベストアンサー率35% (23/65)
A列に一の位が必ず1の数字が入っています とありますが、例を見ると一の位が2の値 例えば A2のセルがあるようですが、 質問の意味を追記頂けないでしょうか?
関連する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列の同じ行に結合したセルをペーストたいのです。 宜しくお願い致します。
- 締切済み
- Visual Basic
- エクセルで同じ数字が連続している個数を関数でセルに出力
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列にはどのような関数を入力すればよいでしょうか。
- ベストアンサー
- その他MS Office製品
- 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どちらにも数値が入力されていることはありません、かならずどちらか一方です。 関数を使わないと出来ないでしょうか? 検索してみましたが、見つからないためどうか宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセル A1の値と同じ値の入ったB列のC列の計
A1=10 D1=37 B C 10 15 11 10 10 12 12 1 10 10 A1と同じ値をB列から探し其の行のC列の値の合計をD1に表示したいのです ご教授ください
- 締切済み
- Visual Basic
- EXCELのマクロにて、ゼロパティングをしたい
A列とB列に3バイトと4バイトの数字がずらっとはいっています。 A列の数値はA2からB列の数値はB2から入っています。、 A列には1ケタから3ケタまでの数が入り、桁数が足りない場合はゼロパティングします。 B列同じです。 やりたいことは、A列とB列の値を縦のセルごとに最終レコードまで結合していきたいのです。 これをVBAでやりたいのです。 入力値によって0の個数が変わる場合の処理がどうしても思い浮かびません。 どなたか知恵を貸していただきたいです。 過去ログに似たようなものがあったのですが、なかなか考えられませんでした。
- 締切済み
- オフィス系ソフト
お礼
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 なんとか自分で考えてコード作ってみましたが、処理が遅いです。 配列処理にするにはどうしたらよいのでしょうか?
補足
すいません。 行が段ずれしてます。 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