[[20160627104350]] 『F5から最終列まで連番を振る』(QPちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『F5から最終列まで連番を振る』(QPちゃん)

こんにちわ。

F5から最終列まで連番を振りたいです。
下記のリストの場合F5からL5まで連番を振られるようにしたいです。

F列から最終行までの間は必ず各列のどこかの行に数字が入っています。

宜しくおねがいします。

 F    G    H     I    J     K    L   M 

 8
 25
 3
 13
 29
 5
 39   2

	16						
	42						
	99	160	160	142			
				18	160	160	

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 アップ後のレイアウト、自分で確かめてみましたか?
 で、アップされたレイアウトで QPちゃん さんが質問している内容って、QPちゃん さん自身が 目で見てわかりますか?

 >>下記のリストの場合F5からL5まで

 まったくわかりませんよねぇ。

 アップされたイメージで、どこにある、どの数字が元々あった数字で、どのセルのどの数字が、振られた連番ですか?

 そもそも、 F5からL5まで と、5行目だけの質問文になっていますが、アップされたレイアウトは 何行もデータがありますねぇ?
 (しかも、どこが 5行目なのかがさっぱりわかりません)

(β) 2016/06/27(月) 11:15


 あとからマクロで作れと言い出してマクロでないものは無視なので回答削除。 
(ねむねむ) 2016/06/27(月) 11:25

(β)さま、

AからDは端折っています。

カタカナで書いてある部分をマクロで実行したいです。
F5から最終列(この場合はL5まで)

宜しくおねがいします。

  F    G    H     I    J     K    L   M 

 1|
 2|
 3|
 4|
 5|  イチ   ニ   サン   ヨン   ゴ   ロク   ナナ  
 6| 8 
 7| 25 
 8| 3 
 9| 13 
10| 29 
11| 5 
12| 39   2 
13|	 16						
14|	 42						
15|	 99	160	160	142			
16|				18	160	160	
(QPちゃん) 2016/06/27(月) 11:55

 レイアウト要件がよくわかりませんが以下だとします。

 ・シート上にはどこに(どの列から)データがあるかどうかはわからないけど、とにかくデータがある。
 ・そのデータの内、6行目より上にデータがあっても、それは無視。6行目から下のデータをチェック。
 ・始まりの列から順番に右にチェック。何かデータがあったとしても数字が、その列になければ、そこでおしまい。
 ・すべて空白でも、おしまい。
 ・結果は 5行目に書きこむ。(もし、5行目に何か書かれていたとしても、それは上書きされる)

 実際には、もっとシンプルな要件なのかもしれませんが、不明だったので、このような面倒くさい判定をしています。
 もし、シンプルな要件で、それが説明されればコードも、もっとシンプルになります。

 Sub Test()
    Dim r As Range
    Dim col As Range
    Dim c As Long
    Dim x As Long

    With ActiveSheet.UsedRange
        Set r = .Cells
        If .Row < 6 Then
            Set r = .Offset(6 - .Row).Resize(.Rows.Count - (6 - .Row))
        End If
    End With

    r.Offset(-1).Resize(1).ClearContents

    For Each col In r.Columns
        If WorksheetFunction.Count(col) = 0 Then Exit For
        x = x + 1
        col.Cells(1).Offset(-1).Value = x
    Next

 End Sub

(β) 2016/06/27(月) 12:28


 ↑ あぁ、A〜E には何か値があるかもしれない。でもそれは無視して、あくまで F列から?
 であれば、アップしたコードでは具合悪いですから、後ほど、改訂版をアップします。

(β) 2016/06/27(月) 12:30


 改訂版です。

 Sub Test2()
    Dim r As Range
    Dim col As Range
    Dim c As Long
    Dim x As Long

    With Range("A1", ActiveSheet.UsedRange)
        Set r = .Offset(5, 5).Resize(.Rows.Count - 5, .Columns.Count - 5)
    End With

    r.Offset(-1).Resize(1).ClearContents

    For Each col In r.Columns
        If WorksheetFunction.Count(col) = 0 Then Exit For
        x = x + 1
        col.Cells(1).Offset(-1).Value = x
    Next

 End Sub

(β) 2016/06/27(月) 12:33


[[20160519153851]] これの続きですよね。ならば、値セット後に以下ではいかがでしょうか。

    With sh1
        .Range("F5", .Cells(5, .UsedRange.EntireColumn.Column + .UsedRange.EntireColumn.Columns.Count - 1)).Formula = "=Column()-5"
    End With
(???) 2016/06/27(月) 14:24

(β)さま、

ありがとうございます。
1から10まで説明しないといけないところを6から10ぐらいしか書き込んでないにも関わらず
理解してくださってありがとうございます。

今後、気を付けます。
(QPちゃん) 2016/06/27(月) 14:52


(ねむねむ)さま、

回答してくださりありがとうございます。
当方、業務中のため返信がおくれてしまいました。
申し訳ありません。
何度か(ねむねむ)さまに回答していただいた事を活かさせていただいております。

とても助かりました。ありがとうございました。
(QPちゃん) 2016/06/27(月) 14:57


(???)さま、

できました!
ありがとうございました。
(QPちゃん) 2016/06/27(月) 15:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.