エクセルで連番を振る方法

このQ&Aのポイント
  • エクセル初心者の方向けに、エクセルで連番を振る方法を解説します。
  • エクセルの作業方向について、下から上、右から左で連番を振りたい場合の方法をご紹介します。
  • 自動連番マクロを使用して、選択範囲に連番を振る方法を解説します。
回答を見る
  • ベストアンサー

選択範囲に下→上、左→右に同時に連番を振りたい

エクセル初心者です。エクセル2010を使用しています。 エクセルで記号や数字を入力して作業をしています。 作業の方向は、基本的に下から上、右から左です。 作業の途中や、終了時点で入力の範囲の右側と下側に連番を入力するのですが、 その時点で、必要な範囲の右端列、左端列、最下段、上の段に連番を入力したいのです。 シートも範囲も変動します。50段位~になります。 基本になる連番は右端列、下の行になります。 セルの数を数えたりして、オートフィル等で連番を入力していますが、選択したらその範囲に自動的にマクロで連番をふることができたらと思って、質問させていただきました。 画像を添付いたしました。よろしくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。 とりあえず、マクロ書いてみました。 使い方はわかるのでしょうか。 何かあれば、補足にでも書いてくださればレスします。 Sub Re8062898()   Dim mtxVtcl()   Dim arrHrzn()   Dim tnRow As Long   Dim tnCol As Long   Dim i As Long      If TypeName(Selection) <> "Range" Then Exit Sub   With Selection     tnRow = .Rows.Count - 2     tnCol = .Columns.Count - 2     If tnRow < 1 And tnCol < 1 Then MsgBox "message": Exit Sub     If tnRow > 0 Then       ReDim mtxVtcl(1 To tnRow, 1 To 1)       For i = 1 To tnRow         mtxVtcl(i, 1) = tnRow - i + 1       Next i       .Cells(2, 1).Resize(tnRow).Value = mtxVtcl       .Cells(2, tnCol + 2).Resize(tnRow).Value = mtxVtcl     End If     If tnCol > 0 Then       ReDim arrHrzn(1 To tnCol)       For i = 1 To tnCol         arrHrzn(i) = tnCol - i + 1       Next i       .Cells(1, 2).Resize(, tnCol).Value = arrHrzn       .Cells(tnRow + 2, 2).Resize(, tnCol).Value = arrHrzn     End If   End With End Sub

limb0310
質問者

お礼

完璧です。思ったとおりの事が一瞬で魔法のように実現しました。 個人用のマクロブックの標準モジュールにコピーをして貼り付けました。 すべてのブックで利用できます。 このようなサイトがあって、感激しています。 本当に有難うございました。 ci mover様、及び回答を下さった皆様、ありがとうございました。感謝!感謝!です。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! すでに色々回答が出ていますので、参考程度で・・・ Sub 逆連番() Dim i As Long, j As Long, cnt As Long, endRow As Long, endCol As Long endRow = Selection(Selection.Count).Row endCol = Selection(Selection.Count).Column cnt = 0 For i = Selection(Selection.Count).Row To Selection(1).Row Step -1 cnt = cnt + 1 Cells(i, endCol + 1) = cnt Next i cnt = 0 For j = Selection(Selection.Count).Column To Selection(1).Column Step -1 cnt = cnt + 1 Cells(endRow + 1, j) = cnt Next j If Selection(1).Column <> 1 Then Range(Cells(Selection(1).Row, endCol + 1), Cells(endRow, endCol + 1)).Copy Selection(1).Offset(, -1) End If If Selection(1).Row <> 1 Then Range(Cells(endRow + 1, Selection(1).Column), Cells(endRow + 1, endCol)).Copy Selection(1).Offset(-1) End If End Sub こんな感じではどうでしょうか?m(_ _)m

limb0310
質問者

お礼

有難うございました。 選択したセルの範囲に、下から右方向に連番が振られていきました。 他の用途に活用させていただきます。 tom04様 有難うございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

次のようなマクロでどうでしょう。 シート見出しを右クリックして「コードの表示」を選んで表示の画面に次のコードを入力します。 Sub 連番表示() Dim gRange As Range Dim n1, n2, m1, m2, i As Integer Dim iRow, iColumn As Integer Set gRange = Application.InputBox(Prompt:="作成する表の範囲を選択してください", Type:=8) n1 = gRange.Row n2 = gRange.Rows.Count + n1 - 1 m1 = gRange.Column m2 = gRange.Columns.Count + m1 - 1 i = 0 For iRow = n2 - 1 To n1 + 1 Step -1 i = i + 1 Cells(iRow, m1) = i Cells(iRow, m2) = i Next i = 0 For iColumn = m2 - 1 To m1 + 1 Step -1 i = i + 1 Cells(n1, iColumn) = i Cells(n2, iColumn) = i Next End Sub マクロの実行は「開発」タブの「マクロ」から「連番表示」を選択して「実行」をクリックします。

limb0310
質問者

お礼

有難うございました。 InputBoxと、思ったとおりの連番が順番に入力されて行くのを見ることができて、面倒だと思っていた入力作業が楽しめます。 エクセルでこういう事をしたいと思っても、身近に回答をしてくれる人を見つけることも出来ませんし、 探すことすら不可能ですので、このような質問のサイトがあって嬉しいです。 有難うございました。活用させていただきます。 本当に感謝です。KURUMITO様、ありがとうございました。

回答No.3

'イガイと簡単かも?、でも、繰り返すと。。。 Option Explicit Sub ReversalRulesSurround() Dim xEdge_Right As Long Dim xEdge_Low As Long Dim kk As Long Dim nn As Long Application.ScreenUpdating = False Application.DisplayAlerts = False xEdge_Right = ActiveSheet.UsedRange.Columns.Count xEdge_Low = ActiveSheet.UsedRange.Rows.Count For nn = 1 To xEdge_Low Cells(nn, xEdge_Right + 1) = xEdge_Low - nn + 1 Next nn For kk = 1 To xEdge_Right Cells(xEdge_Low + 1, kk) = xEdge_Right - kk + 1 Next kk With Columns(xEdge_Right + 1).Font .Bold = True .Italic = True End With With Rows(xEdge_Low + 1).Font .Bold = True .Italic = True End With Columns(xEdge_Right + 1).AutoFit Application.CutCopyMode = False Columns(xEdge_Right + 1).Copy Columns(1).Insert Application.CutCopyMode = False Rows(xEdge_Low + 1).Copy Rows(1).Insert Columns(xEdge_Right + 2).Font.ColorIndex = 3 Rows(xEdge_Low + 2).Font.ColorIndex = 3 Columns(1).Font.ColorIndex = 1 Rows(1).Font.ColorIndex = 1 Range(Cells(2, "B"), Cells(xEdge_Low + 1, xEdge_Right + 1)).Select Application.CutCopyMode = True Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

limb0310
質問者

お礼

有難うございました。 連番がA列とA1から行方向に入力されるのですね。 選択する範囲をマクロに添って、フォントのスタイルなど参考にして、活用させていただきます。 JazzCorp様本当に有難うございました。

noname#204879
noname#204879
回答No.1

添付図参照 1.セル N1、M1 にそれぞれ数値 1、2 を入力 2.範囲 M1:N1 を選択して、左方にズズーッとドラッグ&ペースト 3.範囲 B1:N1 を[コピー]して、此れをセル B15 に[貼り付け] 4.セル A14、A13 にそれぞれ数値 1、2 を入力 5.範囲 A13:A14 を選択して、上方にズズーッとドラッグ&ペースト 6.範囲 A2:A14 を[コピー]して、此れをセル O2 に[貼り付け]

関連するQ&A

  • Excelで連番が増えるごとに数式範囲も自動的に増やせますか?

    Excel2000を使用してます。 ある一覧で、都度、入力数をカウントしてます。 数えるポイントは「ID」という連番の列なんですが、これをいつもフィルで縦に伸ばしてる状態です。 この場合「COUNTA(範囲)」の関数を使用しますが、フィルで伸ばすので、出来たら範囲が自動的に増える関数かVBAがあればと思います。 こんなこと出来ますか?

  • エクセルの範囲選択について

     エクセルでの 範囲選択について質問します。 例えば A列に入っているデータのみをすべて範囲選択して 表示方法を変更したいとき A列の一番上の セルをアクティブにし、コントロールキー+オルトキー+↓で 一番下のセルまで範囲選択します。 その後下にスクロールされている画面を 範囲選択を解除しないまま、一番上の画面まで戻すには どうしたらいいのでしょうか? 垂直スクロールバーを使う方法以外で 簡単に戻す方法はあったら教えてください!!!

  • 左から右に並んでいるデータを右から左に直せる?

    エクセルで横書きで上から下に並んでいる名簿を縦書きで右から左に並ぶように変えたいのです。まずは行と列の入れ替え後、縦書きにしたのですが、それだと左から右に並びます。縦書きだと右から左の方がいいと思うのですが無理でしょうか?

  • A列の下2桁だけが連番でなかったら1行だけを挿入するマクロは?

    基本は、A列の下2桁 ( 各連番が複数ずつあります ) だけが連番になっているんですが、 "たまに"  抜けている ( ない ) 時がありますので、 マクロ実行後に、連番が抜けている ( ない ) 場合に、そこに 「 1行だけ を挿入 」 して、 かつ その行のFS列 ( 175列目 ) まで  ハイフン 「 - 」  を入力したいんです。 そして、必ずデータエリア数を   12  or  24  or   36   にしたいんです ( マクロ実行前は 36 を超えることはありません )。   連番が抜けている ( ない ) 場合、多くても 4・5つのデータエリア です。 3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。 ---------------------------- **01 が 約10~19行 ( 変動します ) まであります ( これを エリア数1 と表現させて頂きます )。 そして、他の 「 **02 ~ **12 」 も同様です。これで 合計エリア数12 となります。 「 **01 ~ **12 」 は、必ず昇順になっています。 下記例は、 エリア数を 実行後 24 にしたい場合の例です ( この場合、実行前は 24 を越えることはありません )。 「 最初の **01 ~ **12 」 のうち 「 **02 」 と 「 **12 」 が抜けている ( ない ) 場合です。  実行前 ( エリア数22 です。「 **02 」 と 「 **12 」 が抜けている ( ない ) ) A列 **01 ・ **01 **03 ・ **03 ・ **11 ・ **11 **01 ・ **01 **02 ・ **12 **12 ↓↓↓ 実行後 ( 挿入した2行を エリア数2 としまして、 合計エリア数24 となります ) A列   B列   ・   ・   FS列  **01 ・ **01 -      -    ・   ・   - **03 ・ **03 ・ **11 ・ **11 -      -    ・   ・   - **01 ・ **01 **02 ・ **12 **12

  • 名前付き範囲の3列目の最終行の1つ下を選択

    Excel2010環境とExcel2003環境が混在する社内で縦長の商品仕様書を作っています。 どの商品も途中で「包装仕様」という一連の入力項目が出てくるのですが、商品によって「包装仕様」が登場する行が異なります(場合によっては列までも異なります)。 そこで「包装仕様入力欄」という名前付き範囲を作成し、その名前付き範囲の「資材名」の新規入力欄に一発でジャンプできると便利だと考えました。 資材名の新規入力セルは範囲名「包装仕様入力欄」の左から2列目になり、範囲名「包装仕様入力」内においてだけならその列の新規入力セル以下には何も入力されていませんが、右隣の列には補足事項が記入されるため、範囲名「包装仕様入力欄」の2列目の最終行の1つ下のセルを狙って選択する必要があります。 Range("包装仕様入力欄")(Range("包装仕様入力欄”).Rows.Count, 2).End(xlUp).Offset(1).Select で確かに動作しますが、「Range("包装仕様入力欄")」を2度も記述しているなど、あまりスマートではありません。もう少しスマートな記述があるのなら教えてください。

  • Excel VBAで結合セルに連番を振っていくには?

    Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。

  • Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか?

    Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか? A列 ────── 2004年   3 ← =sum(A2:A3) 2004/11  1 2004/12  2        ← 空行 2005年  5 ← =sum(A6:A8) 2005/1  3 2005/2  2 2005/3  0        ← 空行 sum()の引数(合計範囲)を求めることできますか? 手作業で"A6:A8"等入力していかないとできないのでしょうか?

  • オートフィルが効かない

    WIN98.Excel 2000を使用しています。 オートフィルで連番を入力しようとしましたが、コピーになります。 Ctrl キーを押すと+ の記号が出るのですが、それでもドラッグするとコピーになります。 なお、B列にはすでに文字列が入力されえいます。 ご指導よろしくお願いいたします。

  • 連続しない範囲で一番右に値のある一番上のセル

    連続しない範囲で一番右の値のある一番上のセルの関数 エクセルの関数について教えてください。 下記表のようにGX列に、連続しない特定の範囲 (R4,AD4,AP4,BB4,BN4,BZ4,CL4,CX4,DJ4,DV4,EH4,ET4)で 「い」列の一番右に値のあるセルの年月を表示させる方法はありますでしょうか? 非表示のセルにも数値が入っていたり、2行目には「い」列があったりします。 年月はセルの結合をしています。 いろいろ調べて試してみたのですが、うまくいきませんでした。 何卒、ご教授よろしくお願い致します。

  • Enterキーだけで、数字をふる方法ありますか?

    エクセル2000です。範囲指定しておき(たとえばA1~A8)、あとは、Enterキーを押すだけで、(他のキーでもいいです)、カーソルが順次移動しながら、1、2、3、4、5、6、7、8、と入力される方法があれば、便利なのですが・・・ (フィル~連続データの作成、で一気に数字が振られる・・・のではなく、一つ一つ確認しながら連番を入力する作業なのです) そんな方法ないでしょうか? よろしくお願いします。

専門家に質問してみよう