[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『終端を自動取得して連番を振るマクロを』 (りく)
早速ですが質問させてください。 F2のセル以下に"1"から始まる連番を振りたいのですが、これをマクロで処理したいと考えています。
自動記録で試してみたら↓のようになりました。
Sub Macro1() ActiveCell.FormulaR1C1 = "1" Range("F2").Select Selection.AutoFill Destination:=Range("F2:F549"), Type:=xlFillSeries Range("F2:F549").Select ActiveWindow.SmallScroll Down:=9 End Sub
ですが、行数がシート毎に異なりますので、当たり前ですがこのままでは他のシート上ではうまくいきませんでした。
こちらのサイトのログなどを見て、データが入ったセルの終端までを自動で選択するには、
Range("F2:F" & Cells(Rows.Count, "A").End(xlUp).Row).select
のように記述すればいいということまではわかったのですが…。
終端(データの終端はA列で判断します。)を自動取得して連番を振るようにマクロを組むには、ここからどうすればよいでしょうか?
単純にマウスでドラッグして下に引っ張れば良いことだとはわかっているのですが… シート数が多いので効率良く作業をしたいのと、マクロにショートカットキーを登録して作業をしたいと考えています。
Excelは2003です。どうぞよろしくお願いします。
追記 書き忘れたのですが、A列のセルに何も入っていない場合は、F列に振る連番も飛ばして、以下に連番が続くようにしたいのですが、この場合はどういう処理になるのでしょうか?
VV = Cells(Rows.Count, "A").End(xlUp).Row Range("F2").Select Selection.FormulaR1C1 = "1" Selection.AutoFill Destination:=Range("F2:F" & VV), Type:=xlFillSeries BJ
BJ 様
ありがとうございます。提示していただいたコードで考えていた通りに連番を振ることが出来ました! VVにA列の終端を取得し格納して、F2のセルに"1"を記入、それをVVまでオートフィルしてあげるという解釈で合っていますでしょうか?^^;
あと、このコードではA列が空白の行にも番号を振ってしまうのですが、 A列のセルが空白の行には、F列にも連番を振らずに飛ばしてやるというような処理をするにはどうすれば良いのでしょうか?
(りく)
>F2のセルに"1"を記入、それをVVまでオートフィルしてあげるという解釈で合っていますでしょうか? 今回の場合は、F2でしたが、連番を振りたい範囲の最初のセルに出だしの数値を記入。 >VVまで ?? F列VV行までです。
>このコードではA列が空白の行にも番号を振ってしまうのですが 空白じゃないからとしか言いようが無いです。 ="" などは、空白ではないです。 また、 ="" の入ったセルをコピーし、値だけ貼り付けた場合も、空白ではないです。 BJ
BJ 様
そうなのですね…。見た目にセルが空白に見えるだけで、それは空のセルという訳ではないのですね。 「=""」というのは、長さが0の文字列扱い?になっているというようなことでしょうか?;
そういったセルというのは、Deleteキーを押すだけで空のセルになる訳ではないということですか?
新規作成したシートで教えていただいたコードを試したのですが、全く操作をせずにコードを実行すると確かに最初の"1"意外の番号は振られませんでした。
また、↓キーで下方向に降りながら"あ"と入力、ポインタを合わせるだけで何も入力しないセル とを数回交互に繰り返した後でコードを実行したところ、 ポインタを合わせただけで編集画面にもしていないセルの行にも番号が振られてしまいました。
全然理解出来ていなくて申し訳ないのですが、これは何かしら操作を加えたセルはもう空のセルでは無いということでしょうか?? 混乱して来ました…が、とても勉強になりました。自分できちんと調べてみようと思います!
ありがとうございました。
(りく)
えっと。。。↓の様にしたい って事ですよね? [A] ・・・・ [F] [1] A列 番号 [2] イ 1 [3] ロ 2 [4] ハ 3 [5] ←飛ばす [6] ←飛ばす [7] ニ 4 [8] ホ 5 [9] ヘ 6 [10]
たぶん、なさりたい事が伝わってなかったと思います。
A列は手入力ですか?
(HANA)
(HANA) 様
図説ありがとうございます。正に仰る通りです。そのように飛ばしたいと考えていました。 最初から文ではなく図で説明するべきでしたね…。
A〜E列には既に文字列や数字が入力されています。 一定の固まり毎に縦に連続して並んでいて、1行空けて、また下に一定の固まりが、という風になっています。 これ以降も手入力でデータを追加していく予定です。
[A] ・・・ [F] [1] 例 番号 [2] イ 1 [3] ロ 2 ← 1群 [4] ハ 3 [5] ←飛ばす [6] ニ 4 [7] ホ 5 ← 2群 [8] ヘ 6 [9] ←飛ばす [10] ト 7 ← 3群
といった感じになっています。きちんと伝わると良いのですが…。 よろしくお願いします。
(りく)
これで良いかなぁ?
Sub test() Dim lrow As Long Dim i As Long Dim j As Long
lrow = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lrow If Cells(i, 1).Value <> "" Then j = j + 1 Cells(i, 6).Value = j End If Next i End Sub (kei)
Sub sample() With Range("a2", Cells(Rows.Count, "a").End(xlUp)) If .Row > 1 Then With .Offset(0, 5) .Formula = "=IF(A2<>"""",COUNTA($A$2:A2),"""")" .Value = .Value End With End If End With End Sub
こんな方法もあります
ichinose
(kei) 様、 ichinose 様
ありがとうございます。 お二方のコードどちらともで考えていた通りの結果が得られました! どういう仕組みでそうなっているかはいまいち理解出来ていませんが…。自分なりにきちんと理解したいと思います。
ありがとうございました。
(りく)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.