アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

#2の補足です。



>つまり、そのまま書けば、Long型に決まっているので、プレフィックスを入れる必要がありません。

少し解説しておくと、

32bit PCは、整数型の場合は、32bit 単位で格納されます。Integer 型の場合は、32bit に変換されてから格納されます。そのままにするので、32bitのほうが速いわけです。だから、通常、整数型なら、Long型に格納したほうがよいわけです。
    • good
    • 0

#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型に決まっているので、プレフィックスを入れる必要がありません。
    • good
    • 0

途中に、複数列を結合したセルがありませんか?

この回答への補足

返信ありがとうございます。
その通りです。確かにあります。
結合したセルだとシート全てが反映されてしまうのでしょうか?

補足日時:2010/05/18 20:18
    • good
    • 0

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