• ベストアンサー

Excel VBA 同列内での入力の繰り返し処理

よろしくお願いします。 シートのA列の1行目から100行目に数字の1~10を繰り返し入力する処理の方法が分かりません。 出力としては下記のようになります。 A列 1 2 3 4 5 6 7 8 9 10 1 2 3 . . . . . . 8 9 10 単純に出来るだろうと思っていましたが、プログラムを作り始めてから悩んでいます。 10の次は1に戻るのですが、行カウンターは1個進みます。 ・入力値が10になったら次の値は1に戻る。 ・行は+1を進める。 このあたりの処理がどうも分かりません。 処理の考え方をどうかご指南いただきたく、よろしくお願いします。

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

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.4

行番号xを10で割った時の余り(mod)を考えてみて下さい。 x    :1,2,3,4,5,6,7,8,9,10,11,12,.... ↓  x mod 10:1,2,3,4,5,6,7,8,9,0,1,2,... 0のところを10にすればうまくいきそうですよね。 もしくは行番号をxとすると、 ((x-1) mod 10 )+1 でもよいです。

mezzanine_jog
質問者

お礼

以下のように作ってみました。 Dim i As Integer Dim k As Integer For k = 1 To 100 i = Cells(k, 1).Row Cells(k, 1) = ((i - 1) Mod 10) + 1 Next k こちらのほうがIf文を使わなくて済むのですっきりですね。 Mod関数も初めて使うことが出来、とても勉強になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Wind-Sun
  • ベストアンサー率27% (36/132)
回答No.3

こんなんどうでしょう。 Dim i As Integer,j As Integer For j = 1 To 100 For i = 1 To 10 Cells(j, 1) = i If i = 10 Then Exit For j = j + 1 Next i Next j For ...Nextの入れ子のシンプルなものですが、 ポイントは5行目のiが10になったら抜けるところと 6行目の行カウンターを1プラスしてあげるところですかね。

mezzanine_jog
質問者

お礼

For文でこのように作れるのですね。 私も最初For文でやってみましたが、カウンターの進め方が分からずにいました。 他にも応用が効きそうですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

添付画像を参照のこと。

mezzanine_jog
質問者

お礼

Mod関数を使って、しかも余りで0を出さない方法なのですね。 とても参考になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8089/17296)
回答No.1

私ならこんな感じ Sub test() Dim aa(1 To 100, 1 To 1) For i = 1 To 100 aa(i, 1) = (i - 1) Mod 10 + 1 Next i Range("a1:a100") = aa End Sub

mezzanine_jog
質問者

お礼

Mod関数を使うというのがよいんですね。 分かりませんでした。 とても参考になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • [エクセル]処理結果を残して次の処理をさせるには?

    AシートのB~G列の各セルには数値が入っており、全部で数百行あります。 Bシートには、いろいろとデータ処理させる作業用のシートとなっております。 Bシートでは、6つの数字を入力するセルに数値を入力する事でデータ処理がされ、Bシート上で結果が算出されます。 現在はBシートに、Aシートの各行のB~G列の6つの数値を入力してデータ処理をして、結果を算出させています。 ですが、Aシートには数百行もあるので、1行1行の数値を入力して処理させていては時間と労力がかかってしまうので、一気に処理できる方法はないか考えていますが、良いアイディアがありません。 AシートのI列の各行に、Bシートでの処理結果をまとめて算出させる方法はないでしょうか? 例えばAシートのB~G列の各行に 1,2,3,4,5,6 7,8,9,1,2,3 4,5,6,7,8,9 と入力されているとします。 Bシートでは、各行の数字を足す処理をさせるとします。(実際はもっと複雑な処理をさせています) 一気にAシートにBシートでの処理結果を表示させたいと思ってます。 1,2,3,4,5,6,21 7,8,9,1,2,3,30 4,5,6,7,8,9,40 何か良い方法はないかと、ずっと考えているのですが、思い付きそうもなかったので、こちらで質問させて頂く事にしました。 アドバイスをお願い致します。

  • エクセルVBA:繰り返し処理について

    エクセルVBA初心者です。どうかご指導お願いします。 シート1に入力されたデータベースがあります。 B列には氏名が入力されています。 B2の値で絞りこんで、シート2に貼り付け、 B3の値で絞りこんで、シート3に貼り付け、 B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。 さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。 下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。 Sub test01()  With sheets("sheet1")Range("A1")   .AutoFilter field:=2, Criteria1:=Range("B2")   .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")   .AutoFilter  End With End Sub

  • EXCELの表の処理についての質問です

    少し複雑な処理かもしれませんが・・ 例えばA列に任意の正負の数が次のように並んでるとします。 A 32 24 -55 44 58 30 -40 27 -59 この時B列に次のように入力したいと思います。 A B 32 24 -55 (32+24+(-55*2)) 44 58 30 -40 (44+58+30+(-40*3)) 27 -59 (27+(-59*1)) つまり、負の数が出てきた行のB列に 「それまでに出てきた正の数の和-(そのセルの数字×正の数の個数)」 という出力をしたいです。 このように出力する方法はあるでしょうか。どなたか教えてください。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

  • エクセルで数字の下1桁を見て並び替える

    エクセルで下記の様な数字が並んでいます。 A列の下1桁の数字は上から順に増えていて、ある数字で1に戻りまた増えています。 その数字は毎回同じではなく、6までの場合もあれば10までの場合もあります。 下記の例では上から6行、次は4行、次は7行と下1桁の数字によってグループ分け出来ますよね? それで上から6行目までのB列の値(462~530)をコピーしてSheet2のA1から横方向に並べます。 その次は7行目から10行目までのB列の値(356~487)をコピーしてSheet2のA2から横方向に並べます。 その次も同じように並べます。 B列が空欄の場合もありますが、その場合はそのままSheet2にも空欄のセルを作ります。 1グループ全部のB列が空欄でもそのままSheet2に空欄の行を作ります。 この動作をマクロで出来る式を教えて頂けないでしょうか? A列          B列 0213240101     462 0213240102    387 0213240103    556 0213240104    585 0213240105    536 0213240106    530 0213240201    356 0213240202    632 0213240203    486 0213240204    487 0213240301    586 0213240302    670 0213240303    619 0213240304 0213240305    645 0213240306    487 0213240307    651 0213240401 0213240402 0213240403 0213240501    455 0213240502    623 0213240503    411 Sheet2 A列   B列    C列   D列    E列    F列   G列 462    387    556    585    536    530 356    632    486    487 586    670    619            645    487    651    455    623    411

  • VBA処理でこんな条件処理ってできますか?

    VBA初心者です。VBAで下記の様な処理は可能でしょうか? 実行したい処理を箇条書きにしますのでご意見下さい。 不明点はご質問下さい。尚、期限がありますので、早めの回答よろしくお願いします。 ・EXCELシートはテーブル、データ、合計値入力用があります。  テーブルシートは10列程の数値があります。これを順番にデータシートに該当する数字を検索して行き(データシートには規則的に空白行が1行ごとに入っています)、あればその下にある数値を覚えておき、1つのデータの検索が終了したら、合計値シートの1つのセルに合計値を入力。これの繰返しです。 初心者の私には複雑な処理に思えるのですが、どなたかアドバイスよろしくお願いします。    

  • どうVBAを書けばいいのでしょうか

    以下のような表があります。 (sheet1) A列 不規則な数列(←一行目にタイトルが書き込まれています) 13   (←二行目から数字がランダムに書き込まれています)    18 44 36 22 14 27 21 32 35 44 12 (以下続く) Case1[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きい件数] Case2[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きく、i+2行の値よりi+3行目の値が大きい件数] などの件数を、新たなシートに書き出したいのです。 上の例からすると、 (sheet2) A列  B列(←B列に件数を書き込む) Case1  3 Case2  1 のような感じです。 if文で作ってみたのですが、うまく処理してくれません。 どのようなVBAを書けばいいのでしょうか。 分かる方、よろしくお願いします。

  • エクセルVBAの入力について

    "Sheet1"のA1、C1、F1、G1の値(計算結果のみ)すべてコピーして、 貼り付ける場所が"Sheet2"のA1:Z10の範囲内で、 A1はB列、C1はG列、F1はH列、G1はZ列の空白セルに上詰めで貼り付ける。 なおF、G、H、Z列以外の列には値が入力されていたり空白もあります。 また同時に、 "Sheet1"のA1、C1、F1、G1の値(計算結果のみ)の内でA1とF1のみコピーして、 貼り付ける場所が"Sheet3"のC1:Y10の範囲とC13:Y23範囲内で、 A1はC列、F1はY列の空白セルに上詰めで貼り付ける。 なおC、Y列以外の列には値が入力されていたり空白もあります。 またC11:Y12の範囲内にはすべて値が入力されています。 よろしくお願いします。

  • EXCEL2010 VBA 繰り返し処理

    EXCEL2010でVBAを使用してシートを作成しています。 シート1のA1にヘッダ数・A2に項目数を入力します。 VBAのコードを実行するとA1のヘッダ数が1ならシート2のA列には何も表示せず A2の項目数の分だけB列の14行目から数字を入力していきます。 (例)シート1   A1:1   A2:20  の場合はシート2のB14から20行下まで1~20の値を自動入力させる。   シート2   B14:1   B15:2     ↓   B33:20 シート1のA1が2以上の場合はシート2のA14から、シート1のA2の数値分アルファベットを表示させていきます。 (例)シート1   A1:2   A2:10  の場合シート2のA14:A23に「A」を表示させます。(シート1のA2の数分この場合は10行ずつ)               A24:A33に「B」を表示させます。               B列にはアルファベットごとに数字を1~表示させます。   B14:B23 1~10   B24:B33  1~10 シート1のA1が2なのでA・Bを表示 A1が3だとA・B・C A1が10だとA・B・C・D・E・F・G・H・I・JがA2の数字で区切りながら表示される。 このようなコードを書きたいのですが、どなたかご教示お願いします。

このQ&Aのポイント
  • 高校以来、7年ぶりに年下男性からの誘いでランチをすることになった。
  • 友達同士の関係性であるが、お会計のことで悩んでいる。
  • 割り勘が適切か、奢るのはどうなのか、年上女性に対するランチの誘いについても考察。
回答を見る

専門家に質問してみよう