No.4ベストアンサー
- 回答日時:
■ 1 点目
> .Range("A1").CurrentRegion.Select
Range の前にピリオドがあるので、With ~ が省略されているのでしょう。
抜粋のコードでは正確なコメントがしにくいのですけど、恐らくシートを
切り替えて実行するとエラーになるのですよね?
With Worksheets("Sheet1")
のようなコードでシートを指定しているのではないですか?
> .Range(Cells(I, 1), Cells(I + 40, PrintCol)).Select 'この文でエラー発生
仮に With Worksheets("Sheet1") が省略されているとするなら、この
コードを Sheet2 がアクティブの状態で実行すればエラーが発生します。
わかり易くコードを補完して書けば、この行は以下のように解釈されて
実行されてます。
Worksheets("Sheet1").Range(ActiveSheet.Cells(I, 1), ActiveSheet.Cells(I + 40, PrintCol)).Select
Worksheets("Sheet1") は With によって補完されるもの。以下に続く
Range() の括弧内の Cells はシートを指定しないと現在アクティブな
シートとなります。
つまり、Sheet2 がアクティブな状態なら、次のコードと同意です。
Worksheets("Sheet1").Range(Worksheets("Sheet2").Cells(I, 1), Worksheets("Sheet2").Cells(I + 40, PrintCol)).Select
Worksheets("Sheet1").Range ~ で Sheet1 にあるセルを参照するよー...
としているのに、肝心の Range の中身で異なるシート、つまり Sheet2
のセルを指定してます。
これはイメージし易いと思いますが、物理的に不可能っぽいです。
■ 2 点目
Select メソッドは「アクティブシートの中にあるものに対してのみ有効」
なので、現在アクティブでない別シートにあるものを Select しようと
するとエラーになります。これは VBA の仕様です。
■ 回避策ですが...一例を示しておきます。
With ActiveSheet
' 列数をカウント
PrintCol = .Range("A1").CurrentRegion.Columns.Count
' 罫線の描画
For I = 1 To PrintRow Step 41
Range(.Cells(I, 1), .Cells(I + 40, PrintCol)).Borders.Weight = xlThin
Next I
End With
# んーー。。。Rem を使う辺りから Basic 系言語の経験がある方だと
# 推察致します。#2 や #3 のコードは VBA では良く使われるテクニック
# ですから、とりあえずお試しを。
この回答への補足
度々すみません。回避策でもだめでした。とりあえずRangeを使った文はエラーにならないので、邪道ですが、Cellsの代わりにRangeで切り抜けることにしました。本当に不思議です。
Rem 行,列数をカウント
.Range("A1").CurrentRegion.Select
PrintCol = .Selection.Columns.Count
Select Case PrintCol
Case 20: PrintCol = "T"
Case 21: PrintCol = "U"
Case 22: PrintCol = "V"
Case 23: PrintCol = "W"
Case 24: PrintCol = "X"
Case 25: PrintCol = "Y"
Case 26: PrintCol = "Z"
Case 27: PrintCol = "AA"
Case 28: PrintCol = "AB"
Case 29: PrintCol = "AC"
End Select
PrintRow = .Selection.Rows.Count
Rem 罫線の描画
For Qq = 1 To PrintRow Step 41
.Range("A" & Qq & ":" & PrintCol & Qq + 40).Select
.Selection.Borders.Weight = xlThin
.Selection.Borders(xlInsideVertical).Weight = xlHairline
.Selection.Borders(xlInsideHorizontal).Weight = xlHairline
Next Qq
No.3
- 回答日時:
CurrentRegion はなかなか曲者なのであまりお勧めしませんが。
。Dim r As Range
' Range("A1").CurrentRegion の範囲と 5行目全体、Rows(5)で
' 重なるセルの参照を試みます
Set r = Intersect(Range("A1").CurrentRegion, Rows(5))
' 参照できれば選択
If Not r Is Nothing Then
r.Select
End If
とか。元のコードを生かすなら
Range("A1").CurrentRegion.Select
I = Selection.Columns.Count
' Cells(5,"A") は A5セルのこと。列の部分は列番号でも文字列でも
' 指定可能。ただし、この例での I は列番号に相当する数値を格納
' した変数なので""で括らない。
Range(Cells(5,"A"),Cells(5,I)).Select
この回答への補足
知りたいのは前に書いたような事ですが、次の文にすると1回目は問題なく2回目エラーになります。
Rem 列数をカウント
.Range("A1").CurrentRegion.Select
PrintCol = .Selection.Columns.Count
Rem 罫線の描画
For I = 1 To PrintRow Step 41
.Range(Cells(I, 1), Cells(I + 40, PrintCol)).Select 'この文でエラー発生
.Selection.Borders(xlEdgeLeft).Weight = xlThin
.Selection.Borders(xlEdgeTop).Weight = xlThin
.Selection.Borders(xlEdgeBottom).Weight = xlThin
.Selection.Borders(xlEdgeRight).Weight = xlThin
Next I
No.2
- 回答日時:
こんにちは。
A5から変動列 i 列まで...なら
Range(Cells(5, 1), Cells(5, i)).Select
や
Range("A5").Resize(, i).Select
または
Sub sample()
Range("A1").CurrentRegion.Rows(5).Select
End Sub
など^ ^
この回答への補足
>A5から変動列 i 列まで...なら
>Range(Cells(5, 1), Cells(5, i)).Select
この文が使えそうなのですが、次のようにするとエラーになります。
With objExcel
中略
.Range(Cells(5, 1), Cells(5, 24)).Select
中略
End With
実行時エラー '1004':
'Range'メソッドは失敗しました:'_Application'オブジェクト
何がいけないのでしょうか。
No.1
- 回答日時:
やりたいことが良く分かりませんが
>例えば5行目のI列を指定する時
Range(Cells(5, i), Cells(5, i)).Select
> Range("A5:" & I & "5").Select では、エラーになります。
たぶん
Range(Cells(1, i), Cells(5, i)).Select
のことかな?
知りたかったのは後の方です。こんな方法があったのですね。でも、
.Range("A1:X41").Select
上の文は何回やっても問題無いのですが、代わりに次の文にすると1回目は問題なく、同じ所を2回目通るとエラーになってしまいます。
全く同じ事をやっていると思うのですが何が原因なんでしょうか。。
.Range(Cells(1, 1), Cells(41, 24)).Select
実行時エラー '1004':
'Cells'メソッドは失敗しました:'_Global'オブジェクト
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 実行時エラー1004 rangeメ...
-
Unionでの他のシートの参照につ...
-
EXCELのSheet番号って変更でき...
-
VBA別シートの最終行の次行へ転...
-
VBA 最終行を選んだシートにコ...
-
【VBA】データを各シートに自動...
-
アクセスからエクセルへ出力時...
-
テキストボックスから、複数の...
-
祝日を除いた月曜から土曜まで...
-
Excel2013で切り取り禁止
-
【VBA】特定の条件でセルをコピー
-
楽天RSSからエクセルVBAを使用...
-
エクセルマクロで自動転記について
-
マクロ実行後に別シートの残像...
-
「段」と「行」の違いがよくわ...
-
エクセルでセルをクリックする...
-
B列の最終行までA列をオート...
-
VBAマクロ実行時エラーの修正に...
-
あああ..ああい..ああう とい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロ実行後に別シートの残像...
-
VBAで変数の数/変数名を動的に...
-
VBA別シートの最終行の次行へ転...
-
Changeイベントで複数セルへの...
-
アクセスからエクセルへ出力時...
-
VBA 別ブックからの転記の高速...
-
Count Ifのセルの範囲指定に変...
-
【VBA】特定の条件でセルをコピー
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
100万件越えCSVから条件を満た...
-
複数シートの複数列に入力され...
-
楽天RSSからエクセルVBAを使用...
-
Excel2013で切り取り禁止
-
Excel VBA オートフィルターで...
-
Unionでの他のシートの参照につ...
-
VBAを使って複数のシートから抽...
おすすめ情報