エクセルに書き込むマクロのコードを書いていたのですが、

Exl.range(Cells(1, 1), Cells(3, 4)).Font.Bold = True

のような部分が、VisualBasic や OFFICEのVBA上で
参照設定でExcelを指定していると、動くのですが、
同じコードが、WSHでは参照設定ができないせいなのか、
動きません。WSHの場合、どのようにしたらよいのでしょうか。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>Range や Cells は、もっと階層をたどったようなオブジェクトの


>表現方法が必要なのだろうかと思ったのですが・・

VB上の参照設定と同じように、アプリ~ブック~シートですよね。

参考URL:http://www.hi-ho.ne.jp/tetsuzo/windows/wsh/excel …
    • good
    • 0
この回答へのお礼

ありがとうございました。ご指示どおりにやってみると、出来ました。

お礼日時:2002/04/01 12:22

Set Exl = WScript.CreateObject("Excel.Application")



上の1行を追加してからつかえます。

Exl.Range(Cells(1, 1), Cells(3, 4)).Font.Bold = True

この回答への補足

ありがとうございます。
説明が不足していました。すみませんでした。
CreateObject をやっても うまくいかなかったのです。
Set Exl = WScript.CreateObject("Excel.Application")
Exl.Range(Cells(1, 1), Cells(3, 4)).Font.Bold = True
で WSHを実行しても、
型が一致しません。: 'Cells'
というエラーが出ます。
もしかしたら、
Range や Cells は、もっと階層をたどったようなオブジェクトの
表現方法が必要なのだろうかと思ったのですが・・

補足日時:2002/03/31 22:10
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel VBA で Cells Range 等で参照しているセルが値か式かを取得するには

お世話になります。

Excel の VBA でシート内のデータを処理しようとしています。
セルの内容を文字変数に代入して処理し、それを元のセルに戻すのですが、セルが値であれば問題ないのですが、式だった場合、計算結果を文字にして戻してしまいます。つまり式が消えてしまい、値複写と同じ結果になってしまいます。
そこで、セルが式ならばそのまま処理しないでおきたいのですが、セルが値なのか式なのかを取得する方法が分かりません。
ご教授下さいますようお願いいたします。

Aベストアンサー

MsgBox Range("A1").HasFormula

True なら式です。

Q「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現在のセル( n , "A" )より14行上に数値がないことを確認するために
'14行上のセルを全て足し算しています。
For m = n - 14 To n - 1
s = s + Worksheets("Sheet1").Cells(m, "A").Value
Next

'足し算結果がゼロならば何も記入していないと判断し、
'数字の「1」を記入します。
If s >= 1 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 0
ElseIf s = 0 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 1
End If
End Sub

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現...続きを読む

Aベストアンサー

はいはい了解。

今着目しているセルが (n,1)であるとする。

条件: 今いるところから上に14行サーチして、一度でも1か2の値が見つかったら
     回答を0とする。14行すべてに1・2の値がひとつも含まれていなければ1とする。



Ans = 1

for i = 1 to 14

x = cells ( n - i , 1 ).value

if x = 1 or x = 2
then
Ans = 0
endif
next i


cells ( n , 1 ) = Ans


デフォルトの回答値=1としておき、一回でも条件にヒットしたら回答値=0にする。
ヒットしたらfor~nextを強制的に閉じてもいいけど、面倒なのでそのまま14回検索する。

Q.copy に、Rangeではなく Cells を使えませんか?

ブック間で、変数によるコピー貼付けをしたいのです

Workbooks(MyFName).Worksheets("部品表").Cells(j * 17 - 11, 2).Copy_
Workbooks(MyFName2).Worksheets("PartsList").Cells(k * 39 - 37, 2)
と書いて見ましたが、デバックしてしまいました。

.Activate の場合も
cellsは使えませんか?

どうぞ教えてください

Aベストアンサー

ただ、RANGEで括るだけでは動きませんので

Dim ws As Worksheet
Dim ws2 As Worksheet

Set ws = Workbooks(MyFName).Worksheets("部品表")
Set ws2 = Workbooks(MyFName2).Worksheets("PartsList")

ws.Range(ws.Cells(j * 17 - 11, 2), ws.Cells(j * 17 - 11, 2)).Copy _
ws2.Range(ws2.Cells(k * 39 - 37, 2), ws2.Cells(k * 39 - 37, 2))

Set ws = Nothing
Set ws2 = Nothing

又は、
Workbooks(MyFName).Worksheets("部品表").Range("B" & j * 17 - 11).Copy _
Workbooks(MyFName2).Worksheets("PartsList").Range("B" & k * 39 - 37)
でも動きます。
こちらの方が余り変更がなくて済みます。

ただ、RANGEで括るだけでは動きませんので

Dim ws As Worksheet
Dim ws2 As Worksheet

Set ws = Workbooks(MyFName).Worksheets("部品表")
Set ws2 = Workbooks(MyFName2).Worksheets("PartsList")

ws.Range(ws.Cells(j * 17 - 11, 2), ws.Cells(j * 17 - 11, 2)).Copy _
ws2.Range(ws2.Cells(k * 39 - 37, 2), ws2.Cells(k * 39 - 37, 2))

Set ws = Nothing
Set ws2 = Nothing

又は、
Workbooks(MyFName).Worksheets("部品表").Range("B" & j * 17 - 11).Copy _
Workbooks(MyFName2...続きを読む

QRangeプロパティとCellsプロパティ

お世話になります。

現在、VB.NET2003からExcel2003を操作するプログラムを作成しているのですが、基本的な点が一つ、わかりませんので、教えていただけないでしょうか?

Range("C5")は、Cells(5,3)
Range("B1:D5")は、Range(Cells(1,2), Cells(5,4))、
と表すことが出来ますが、
Range("A1:E1,A4:E7")はCellsプロパティではどのように指定すればよろしいのでしょうか?

以上、宜しくお願いいたします。

Aベストアンサー

2つのRangeを別に作成して、「Union メソッド」で結合するとか・・・

QRangeとcellsの範囲選択について

Range("D7:E27,G7:H27").Select
のような感じを
Range(cells(a,b),cells(c,d)・・・)
みたいな感じで変数が使える形で設定したのですが、
どうすればよろしいのでしょうか?

Aベストアンサー

Cellsを使う場合複数のRangeオブジェクトに分けてこれをUnionで合成します

Range( "D7:E27,G7:H27" )なら D7:E27とG7:H27の2つに分けます

Union( Range( Cells( 7, 4 ), Cells( 27, 5 ) ), _
    Range( Cells( 7, 7 ), Cells( 27, 8 ) ) ).Select
といった具合です


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報