- 締切済み
G列に入っているデータの行までB列を範囲指定して
G列に入っているデータの行までB列を範囲指定して B列に1を入力したいのですが、 Range(B & "1" & ":" & B & IngKns).Selectでシート全てが指定され シート全てに1が入力されてしまいます。 何がいけないのでしょうか? 例えばD列が1~30行目までデータが入っていればB1~B30まで1を入力 したいのですが。。。 Dim l_xlsSheet As Worksheet Set l_xlsSheet = ThisWorkbook.Worksheets("Sheet1") ' IngKns = WorksheetFunction.Count(l_xlsSheet.Cells.Range("G1:G65536")) ' Range(B & "1" & ":" & B & IngKns).Select Range(B & "1" & ":" & B & IngKns) = 1
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
#2の補足です。 >つまり、そのまま書けば、Long型に決まっているので、プレフィックスを入れる必要がありません。 少し解説しておくと、 32bit PCは、整数型の場合は、32bit 単位で格納されます。Integer 型の場合は、32bit に変換されてから格納されます。そのままにするので、32bitのほうが速いわけです。だから、通常、整数型なら、Long型に格納したほうがよいわけです。
- Wendy02
- ベストアンサー率57% (3570/6232)
#6086516を返事した後に書かれたものですから、一部、そちらに関連した内容になっています。 >結合したセルだとシート全てが反映されてしまうのでしょうか? 聞いたことがないですね。 Range(B & "1" & ":" & B & IngKns).Select ただ、こうしたら、1行目から、lngKns 全体を選択します。 それに、WorksheetFunction.Count としたら、抜けていたら、少なくなってしまいます。 >例えばD列が1~30行目までデータが入っていればB1~B30まで1 4列目つまり、D列になりますから、.Cells(Rows.Count, 4) となります。 '// Sub TestRange() Dim Sh As Worksheet Dim i As Long With ThisWorkbook.Worksheets("Sheet1") i = .Cells(Rows.Count, 7).End(xlUp).Row '7 = G列 .Range("B1:B" & CStr(i)).Value = 1 End With End Sub ところで、「l_xlsSheet」この変数名は、何かを参考にしたものですか? ここの掲示板では、必ずしも、私のような書き方は推奨できるものではないのですが、ここは、文字列の制限があるので、短めにしています。ただ、個人的な経験から、アンダーバーを入れると、後からの修正に非常に手間を取られることがあります。また、l_ は、ローカルという意味だということは分かりますが、l_xls という書き方スタイルは、VBA系にはないような気がします。それは、クラス・インスタンスの時に、初めて、そうした概念的なものが必要になります。そうでなければ、その書き方はやめたほうが無難です。また、一般的に数値は、Long型とDouble型です。つまり、そのまま書けば、Long型に決まっているので、プレフィックスを入れる必要がありません。
- bin-chan
- ベストアンサー率33% (1403/4213)
途中に、複数列を結合したセルがありませんか?
補足
返信ありがとうございます。 その通りです。確かにあります。 結合したセルだとシート全てが反映されてしまうのでしょうか?