プロが教える店舗&オフィスのセキュリティ対策術

Microsoft Excel 2003での質問です。

表を作成しました。
結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。
これをVBAを使って自動化したいのです。

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

A 回答 (4件)

こんな感じで如何でしょうか。



このマクロを実行すると、範囲を聞いていますので、新しく継続番号を付与する
範囲を選択して、[OK]します。指定範囲の1つ上が数字の場合は、その番号に
続く番号を付与し、数字で無い場合は、1から付与します。

複数列を含む範囲を指定した場合は、最左列だけが有効です。

Sub 結合対応連続番号付与()
Dim Num As Long
Dim Hani
On Error Resume Next
Set Hani = Application.InputBox(vbLf & " ※ 連番付与範囲を選択して" & _
    "[OK]を押してください。" & vbLf & vbLf & _
    " 上のセルから連続番号を付与します。(結合対応)", _
    Type:=8).Resize(, 1)
If Err.Number > 0 Then Exit Sub
Hani.Resize(1).Select
If Selection.Row = 1 Then
  Num = 1
Else
  Selection.Offset(-1).Select
  If IsNumeric(ActiveCell.Value) Then
    Num = ActiveCell.Value + 1
  Else
    Num = 1
  End If
End If
Hani.Resize(1).Select
Do Until Intersect(Selection, Hani) Is Nothing
  ActiveCell.Value = Num
  Num = Num + 1
  Selection.Offset(1).Select
Loop
End Sub
    • good
    • 0
この回答へのお礼

ja7awu様

ご丁寧なご回答、ありがとうございます。
さっそく実行してみましたところ、
実にわかりやすくスムースに連番を振ることができました。
工夫次第でいろいろと応用できそうなプログラムでした。
ソースを見ても、私には分からないコマンドがたくさん出てきますが、
参考にさせていただき、勉強したいと思います。

助かりました。ありがとうございました。

お礼日時:2004/01/25 21:01

仮にA1:A13の例


Sub test01()
Dim cl As Range
n = 1
m = "n" '上セルはマージなし
For Each cl In Range("a1:a13")
If cl.MergeCells = True Then
If m = "y" Then
Else
cl = n
n = n + 1
End If
m = "y"
Else
m = "n"
cl = n
n = n + 1
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

imogasi様

ご回答ありがとうございます。
記述していただいたプログラム、実行してみたのですが、私の未熟さ、無知ゆえに、ちょっと思うとおりに動いてくれませんでした。
せっかくご親切にご回答いただいたにもかかわらず、誠にふがいないお礼になってしまいますが、少し基礎を勉強し、imogasi様に教えていただいたプログラムを動かしてみようと思います。

本来であれば感激の謝辞を述べるべきですが、現在の私の腕で試行錯誤しているとお礼が遅れてしまうおそれがありますので、とりいそぎ、お礼申し上げます。

imogasi様のご厚意に添えることができず、誠に心苦しく存じます。申し訳ありません。
ありがとうございました。

お礼日時:2004/01/25 21:20

Sub test()


Dim m, n, a As Integer
Dim str As String
n = ActiveCell.Row
a = ActiveCell
For m = n + 1 To n + 10
Range("A" & m).Select
If ActiveCell = "" Then
a = a + 1
ActiveCell = a
End If
Next m
End Sub
'現在の選択しているところのセルの位置と値を読み込み
'その下のセルに、1加算した値を書き込む
'書き込む条件として、空白セルであること
'どこまで、連番にすればよいかわからないので
'適当
    • good
    • 0
この回答へのお礼

primary5869様

早速のご回答、ありがとうございます!
ご教示の通り入力したところ、希望通りの操作ができました。感謝いたします。
一つ上のセルに足したい数値は1だったので、
For文行の最後の10を1に調整し、実行してみました。

ありがとうございました。

お礼日時:2004/01/25 20:39

Sub test()


Dim m, n, a As Integer
Dim str As String
For m = 1 To 20

Range("A" & m).Select
If ActiveCell = "" Then
a = a + 1
ActiveCell = a
End If
Next m
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!