エクセル2000でブック間のデータのコピーをやっていての質問です。
あるディレクトリ内に「統合するファイル.xls」と「統合されるファイル.xls」があります。両方のファイルにはC列からG列、2行目以下に数字のデータが入っています。(C2~G2、C3~G3・・・・というように続きます)
「統合されるファイル」のC列からG列のデータをコピーして「統合するファイル」のデータの下に貼り付けるプログラムを作っています。プログラムは以下です。

Dim sBase As String
Dim sMyPath As String
Dim lLine As Long
Dim lStartRow As Long
Application.ScreenUpdating = False
'統合するファイル名・ディレクトリ名取得
sBase = ActiveWorkbook.Name
sMyPath = ActiveWorkbook.Path & "\"

Workbooks.Open Filename:=sMyPath & "統合されるファイル.xls"
lLine = Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row
'統合するファイルの最終行を抽出
lStartRow = 0
lStartRow = Workbooks(sBase).Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row
'統合されるファイルからコピーして統合するファイルの最終行より下に貼り付け
Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Range(Cells(2, 3), Cells(lLine, 7)).Copy Destination:=Workbooks(sBase).Worksheets("Sheet1").Range(Cells(lStartRow + 1, 3))

Workbooks("統合されるファイル.xls").Close SaveChanges:=False
Application.ScreenUpdating = True

現在、このプログラムを走らせると、コピーして貼り付けるところで「アプリケーション定義またはオブジェクト定義のエラーです」という警告が出てコピーされない状況です。
何が悪いのでしょうか?

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

A 回答 (1件)

Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Range(Cells(2, 3), Cells(lLine, 7)).Copy Destination:=Workbooks(sBase).Worksheets("Sheet1").Range(Cells(lStartRow + 1, 3))



コピー部分とペースト部分を単純に分けたほうが簡単だと思いますが。

' コピー部を選択し、コピー
Windows("統合されるファイル.xls").Activate
Range(Cells(2, 3), Cells(lLine, 7)).Select
Selection.Copy

' ペースト部を選択し、ペースト
Windows(sBase).Activate
Cells(lStartRow + 1, 3).Select
ActiveSheet.Paste
    • good
    • 0

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

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

QExcel VBA ActiveSheet.Name でsheet名を分割するには?

name = ActiveSheet.Name
取得したsheet名を指定した文字分だけを区切って変数に代入して表示は可能でしょうか?

例>
name = "M_P_S1_2900_50_+4" という情報が入っているとします。 これを…

str1 = "M_P_S1"
str2 = "2900"
str3 = "50"
str4 = "+4"

という感じで情報を抜きとりたい。
str1 = Range("A1")
 ・
 ・
と表示させる。
余談ですが、半角と全角では文字列の抜き取り情報は変わるのでしょうか? 
例>
東京都_新宿区_百人町_○丁目

は 1bit or 2bit? それとも1文字として情報は受取るのでしょうか?
アドバイス宜しくお願い致します。

Aベストアンサー

.が何文字を意味するか不明ですが
Sub test01()
d = Range("A65536").End(xlUp).Row
' MsgBox d
For i = 1 To d
s = Split(Range("A" & i), "_")
str1 = s(0) & "_" & s(1) & "_" & s(2)
str2 = s(3)
str3 = s(4)
str4 = s(5)
' MsgBox str4
Next i
End Sub
Split関数を使い、s(0)から始まること、上限はHbound(s)
です。
For k = 0 To UBound(s)
MsgBox s(k)
Next k
ですべて左から列挙できます。
>1bit or 2bit? それとも1文字として情報は受取るのでしょうか
半角は半角で全角は全角で1文字としてくれます、心配要りません。
>str1 = Range("A1")
 ・
と表示させる。
この意味不です。

QExcelVBAでCells(Row,Column)を使用してセルの範囲を指定する方法

Excelのプログラムで例えば、セル「A」から「F」までの範囲の場合、

Range("A:F")

セル「A1」から「F3」の場合、

Range("A1:F3")

となりますが、これをCells(Row,Column)を使用した方法はあるでしょうか?
回答よろしくお願いします。

Aベストアンサー

>Range("A1:F3")

これを、Cells(Row,Column)のみで表すことはできません。
同じRangeプロパティを使って

Range( Cells(1,1), Cells(3,6) )

Range( Cells(1,"A"), Cells(3,"F") )

Row1 = 1 :Clm1 = 1
Row2 = 3 :Clm2 = 6
Range( Cells(Row1,Clm1), Cells(Row2,Clm2) )

見れば分かると思いますが、
Cells(Row,Column)では、ひとつのセルしか指定できない、
即ちRangeプロパティみたいに範囲指定は出来ないということです。


ところで、
ComboBoxの▲云々の質問が削除されてませんか?
夜にでも回答しようかと思っていたのですが。(^^;;;
自己解決したのでしょうね。たぶん。
 

Q1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある

1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある場合、
すべてのファイルに一斉にA1セルに「a」という文字を反映させる場合の
VBAプログラムを教えていただけますでしょうか?
よろしくお願いいたします。

Aベストアンサー

フォルダ名を変更してから試してね
4行目の
mPath = "C:\tmp\"
「aaa」なら
mPath = "C:\aaa\"
に変更


Sub test()
Dim mPath As String
Dim nf As String
mPath = "C:\tmp\"
nf = Dir(mPath & ".xls")
Do While nf <> ""
Workbooks.Open Filename:=mPath & nf
Workbooks(nf).ActiveSheet.Range("a1").Value = "a"
Workbooks(nf).Close SaveChanges:=False
nf = Dir()
Loop
End Sub

簡単なコードにしてあるので、分らない所はヘルプで調べてね
参考まで

QIf myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou こちらについて教えていただきたいです。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, i + 24) = myTorikomibi
Next i
マクロを編集しようとしましたところこちらが解読できづに困っています。
こちらだけとりだして実行しながら解読していますが混乱してしまっています。ご存知の方いらっしゃいましたら教えてください。Then以降がわかりません。よろしくお願いいたします。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells...続きを読む

Aベストアンサー

こんにちは。maruru01です。

ヘルプはご覧になりましたか?
特に、Cellsについて。
Cellsは、

Cells(行番号, 列番号)

で、セルを参照します。
なので、各条件の時に、変数「myTantou」や「myTorikomibi」に格納されている値をそれらのセルに代入しているだけですが。
ただし、行番号が、

「myPrefNO + 3 - 47」
「myPrefNO + 3 - 47 - myCityNu」

などとちょっとややこしくなっていますが。
これも、変数「myPrefNO」「myCityNu」に入っている値から行番号が決まるというだけです。
例えば、
myPrefNO=60
myCityNu=2
なら、下の例は、
60+3-47-2=14
で、14行目となるということです。

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます


人気Q&Aランキング

おすすめ情報