Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5792 / 13646 ツリー ←次へ | 前へ→

【48840】'Range'メソッドは失敗しました:'Global'オブジェクト 李洪千 07/5/10(木) 23:13 質問[未読]
【48841】Re:'Range'メソッドは失敗しました:'Globa... りん 07/5/11(金) 0:19 回答[未読]
【48844】返信ありがとうございました。 李洪千 07/5/11(金) 7:31 回答[未読]
【48846】成功しましたが、止まらないです! 李洪千 07/5/11(金) 8:47 回答[未読]
【48847】Re:成功しましたが、止まらないです! Jaka 07/5/11(金) 11:06 発言[未読]

【48840】'Range'メソッドは失敗しました:'Global...
質問  李洪千  - 07/5/10(木) 23:13 -

引用なし
パスワード
   VBAの素人です。現在言及に使う簡単なVBAを作っています。
以下の内容を実行したら'Range'メソッドは失敗しました:'Global'オブジェクトというメッセージがでます。原因はなんでしょうか。研究のために必要なためぜひ教えてください。やろうとしているのは、以下のデータをデータベースに入力するために、項目ことに横に並べたいです。それを繰り返して行うためにいろいろ指向錯誤をしていますが、やはり基礎がないものなのでうまくいかないです。よろしくお願いします。
--------------------------------------------------------------------
Public Function pp()
Dim r As Integer
Dim t As Integer
Dim s As Integer

r = 1
s = 1

Do
d = Cells(r, 1)
cCell = Cells(s, 5)

If d = 1 Then Exit Do
t = r + 2
Range(Cells(r, 3), Cells(t, 3)).Select
Selection.Cut
Range(Cells(s, 1)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
r = r + 5
s = s + 1
Loop
End Function
---------------------------------------------------------
    2.     [110000033238]吉本,秀子
<論文>国際報道分析の枠組みとしてのプロパガンダ理論
山口県立大学國際文化學部紀要 9,A21-A30,20030325(ISSN 13427148) (山口県立大学国際文化学部 編/山口県立大学国際文化学部/山口県立大学)
        ■収録データベース :NDL NII-ELS
        ■本文: CiNii PDF    資料を入手するにはRefWorks

【48841】Re:'Range'メソッドは失敗しました:'Glo...
回答  りん E-MAIL  - 07/5/11(金) 0:19 -

引用なし
パスワード
   李洪千 さん、こんばんは。

>'Range'メソッドは失敗しました:'Global'オブジェクトというメッセージがでます。原因はなんでしょうか。

原因は、Rangeの引数の指定が間違えているからです。
ちょっとわかりにくいかもしれませんが。
引用開始===================================
《行列位置で単体のセル指定》
1 つのセルを取得するには、Cells(row, column) プロパティを使用します。引数 row には、行のインデックスを指定します。引数 column には、列のインデックスを指定します。次の使用例は、セル A1 の値に 24 を設定します。
Worksheets(1).Cells(1, 1).Value = 24

《文字列でセル(範囲)指定》
1 つのセルまたはセル範囲を表す Range オブジェクトを取得するには、Range(arg) プロパティを使用します。引数 arg には、範囲の名前を指定します。次の使用例は、セル A1 の値をセル A5 に入力します。
Worksheets("Sheet1").Range("A5").Value = Worksheets("Sheet1").Range("A1").Value

《Rangeオブジェクトでセル範囲指定》
Range オブジェクトを取得するには、Range(cell1, cell2) プロパティを使用します。引数 cell1 には最初のセルを指定します。引数 cell2 には最後のセルを指定します。次の使用例は、セル範囲 A1:J10 の罫線の線の種類を設定します。
With Worksheets(1)
  .Range(.Cells(1, 1), _
    .Cells(10, 10)).Borders.LineStyle = xlThick
End With
引用終了===================================

なので、

> Range(Cells(s, 1)).Select
  ↓
  Cells(s, 1).Select
です。

しかし、上のが解決しても、
>Selection.PasteSpecial
 ↑ここで「形式を選択して貼り付け」を実行しているようですが、その前のアクションが切り取りなので必ずエラーになります。

> End Function
あと、値を返す必要がないようですが、なぜFunctionを使用しているのですか?

【48844】返信ありがとうございました。
回答  李洪千  - 07/5/11(金) 7:31 -

引用なし
パスワード
   ご返信ありがとうございました。
本当に素人などで何も分からないです。ここまでなんとか書くことになるまで5時間かかりました。Functionをつかったのは、それで実施するとエラーが出なかったからです。返信を内容を吟味して再度チャレンジーして見ます。


▼りん さん:
>李洪千 さん、こんばんは。
>
>>'Range'メソッドは失敗しました:'Global'オブジェクトというメッセージがでます。原因はなんでしょうか。
>
>原因は、Rangeの引数の指定が間違えているからです。
>ちょっとわかりにくいかもしれませんが。
>引用開始===================================
>《行列位置で単体のセル指定》
>1 つのセルを取得するには、Cells(row, column) プロパティを使用します。引数 row には、行のインデックスを指定します。引数 column には、列のインデックスを指定します。次の使用例は、セル A1 の値に 24 を設定します。
>Worksheets(1).Cells(1, 1).Value = 24
>
>《文字列でセル(範囲)指定》
>1 つのセルまたはセル範囲を表す Range オブジェクトを取得するには、Range(arg) プロパティを使用します。引数 arg には、範囲の名前を指定します。次の使用例は、セル A1 の値をセル A5 に入力します。
>Worksheets("Sheet1").Range("A5").Value = Worksheets("Sheet1").Range("A1").Value
>
>《Rangeオブジェクトでセル範囲指定》
>Range オブジェクトを取得するには、Range(cell1, cell2) プロパティを使用します。引数 cell1 には最初のセルを指定します。引数 cell2 には最後のセルを指定します。次の使用例は、セル範囲 A1:J10 の罫線の線の種類を設定します。
>With Worksheets(1)
>  .Range(.Cells(1, 1), _
>    .Cells(10, 10)).Borders.LineStyle = xlThick
>End With
>引用終了===================================
>
>なので、
>
>> Range(Cells(s, 1)).Select
>  ↓
>  Cells(s, 1).Select
>です。
>
>しかし、上のが解決しても、
>>Selection.PasteSpecial
> ↑ここで「形式を選択して貼り付け」を実行しているようですが、その前のアクションが切り取りなので必ずエラーになります。
>
>> End Function
>あと、値を返す必要がないようですが、なぜFunctionを使用しているのですか?

【48846】成功しましたが、止まらないです!
回答  李洪千  - 07/5/11(金) 8:47 -

引用なし
パスワード
   成功しました。しかし、プロセスが止まらないですね。
また、アドバイスをお願いできますか。

Public Sub pp()
Dim r As Integer
Dim t As Integer
Dim s As Integer
r = 1
s = 1
m = 1
n = 1


Do
d = Cells(n, 1)
If d = "1" Then Exit Do
t = r + 2
m = m + 2
Worksheets("sheet1").Select
Range(Cells(r, 3), Cells(t, 3)).Select
Selection.Copy
Worksheets("sheet2").Select
Cells(s, 1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
r = r + 5
s = s + 1
n = n + 1
Loop

End Sub

【48847】Re:成功しましたが、止まらないです!
発言  Jaka  - 07/5/11(金) 11:06 -

引用なし
パスワード
   > Do
> d = Cells(n, 1)
    ↑
  この書き方だと、現在アクティブになっているn行1列目のセルということになります。

> If d = "1" Then Exit Do
> t = r + 2
> m = m + 2
> Worksheets("sheet1").Select
   ↑
  ここと
> Range(Cells(r, 3), Cells(t, 3)).Select
> Selection.Copy
> Worksheets("sheet2").Select
   ↑
  ここでシートを選択し直していますが、
  dの値は、Sheet2のn行1列目のセルという事になりますが、
  その辺は、大丈夫なのでしょうか?
> Cells(s, 1).Select
> Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
>    False, Transpose:=True
> r = r + 5
> s = s + 1
> n = n + 1
> Loop

いちいちシートやセルを選択しなくても、
どのブックの中のどのシートのどのセルなのかを明確に指定したやれば、
いちいち選択しなくても、値の書き込み、取得やセルのコピペができます。


Cells(n,m)
何もしていない場合、現在アクティブになっているシートのCells(n,m)を指します。

Sheets("Sheet3").Cells(n,m)
現在アクティブになっているブックの「Sheet3」のCells(n,m)を指します。

WorkBooks("Book5.xls").Sheets("Sheet4").Cells(n,m)
Book5.xlsブックの「Sheet4」のCells(n,m)を指します。

ThisWorkBook..Sheets("Sheet2").Cells(n,m)
このマクロが書いてあるブックの「Sheet2」のCells(n,m)を指します。

ブックやシートオブジェクトは変数にセットして使うこともできますが、
まずは基本を博して下さい。
過去ログ等にも色々ありますから、色々コードを見てみると良いと思います。
(実は手抜き、うまく説明できそうに無い。)

「F8」を押すことで1行づつコードの進行ができますから(ステップ実行)
これで、今どこで何をやっているのかを確認してみてください。

5792 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free