|
▼Jaka さん:
ありがとうございます。
>国語力が貧相なJakaです。
>やっぱり質問の意味がよく解りませんでした。
うまく伝えられない私が、申し訳ありませんm(_ _)m
>
>提示されたシートレイアウト通りに?BOOK1.xls、BOOK2.xlsを作り、
>BOOK1、2のデータがあるであろうシート名を「データ」とし、
>実行ファイルのシートの1つを「一覧」にして、最初に提示されたコードを
>走らせて見ましたが、動きませんでした。
>質問の中では動いているそうですが...??
>
>で、データレイアウトを下記のように変え、
>
>BOOK1.xls (シート名データ)
> B C D
>1 4月 5月 6月
>2 100 200 300
>
>BOOK2.xls
> B C D
>1 4月 5月 6月
>2 300 400 500
>
>コードを下記に変えて動かしてみました。、
>
>Sub kousin()
> Dim thename As String
> Dim thedir As String
> Dim thebook As Workbook
> Dim AROW As Integer
> Dim myarray As Variant
> Dim i As Integer
>
> Application.ScreenUpdating = False
>
> thedir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\dddd"
>
> thename = Dir(thedir & "\*.xls")
> Do While thename <> ""
> If thename <> ThisWorkbook.Name Then
> Set thebook = Workbooks.Open(thedir & "\" & thename)
> AROW = ThisWorkbook.Worksheets("一覧").Range("A65536").End(xlUp).Row
> ThisWorkbook.Worksheets("一覧").Cells(AROW + 1, 1).Value = _
> Left$(thename, Len(thename) - 4)
>
> With thebook.Worksheets("データ")
> myarray = Array(.Range("B2"), .Range("C2"), .Range("D2"))
> For i = 0 To 2
> ThisWorkbook.Worksheets("一覧").Cells(AROW + 1, 2 + i) _
> .Value = myarray(i)
> Next i
> End With
>
> thebook.Close savechanges:=False
> End If
> thename = Dir()
> Loop
> Application.ScreenUpdating = True
>End Sub
>
>
>実行1回目、一覧シートの結果
>
> A B C D
>1 4月 5月 6月
>2 Book1 100 200 300
>3 Book2 300 400 500
>
>
>BOOK1の内容を↓この様に変えて
>
> B C D
>1 4月 5月 6月
>2 100 200 300
>
>
>実行2回目、一覧シートの結果
>
> A B C D
>1 4月 5月 6月
>2 Book1 100 200 300
>3 Book2 300 400 500
>4 Book1 150 200 300
>5 Book2 300 400 500
>
>このようになります。
>>書き換えられてしまいました
>とはなりません。
thisworkbook.worksheets("一覧").range("A2:D65536").clearcontents
記入漏れがありました。
>
>また、最初に提示してあったコードのこれ、エラーになりませんでしたか?
>
> myarray = Array(.Range("B2"), .Range("C2"), .Range("D2"))
> For i = 1 To 3
>
>i = 0 to 2
>では。
option explicit
option base 1
を設定しているので1始まりになっています。
しかしセルが連なっているのでわざわざarrayを使わず
Jakaさんのコードで書かれているcells(1,i)のように
するほうがわかりやすかったので変えます。
>
>それと、
>>4月 5月 6月
>>100 200 350
>と、書くと読んだ人は、A、B、C列と判断します。
>なのに
>>Array(.Range("B2"), .Range("C2"), .Range("D2"))
>B、C、D列なんですよね?
>
>もっとシートレイアウトは正しく、誰が見ても解るように
>コードは実際に、動いたものを載せてください。
>質問内容を国語力が貧相な私にもわかるぐらいにしてください。
>
記入漏れ、書き間違いがあり
混乱させてしまいました。
申し訳ございません。
B、C、D列で4月5月6月です。
ここからも長くなりそうなので
続きを次の投稿で書きたいと思います。
|
|