教えて!gooにおける不適切な投稿への対応について

VBAで数値を左から蓄積していきたいのですが、下記コードを直すとしたらどうすればいいか教えて下さい。

①「With .Worksheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft)」の部分はSheet1を指定しているのですが、これを蓄積元のブックのセルA1に書いてあるシート名を指定するにはどうすればいいでしょうか。

②下記コードを実行した場合セルA1から左にデータ蓄積していくのですが、これをセルB1~D1までに蓄積する範囲を指定できないでしょうか。

a = ActiveCell.Value
With Workbooks.Open(Filename:=Range("B25"))
With .Worksheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft)
If Not IsEmpty(.Value) Then
.Offset(, 1).Value = a
Else
.Value = a
End If
End With
.Close savechanges:=True
End With

gooドクター

A 回答 (3件)

こんにちは




「"Sheet1"」の代りに「蓄積元のブックのセルA1」の文字列にすれば良いです。
ただし、文字列が空白だったり、対応するシートが無い場合には、そのままだとエラーが発生して処理が停止します。


>A1から左にデータ蓄積していくのですが
とてもそうは思えません。
コードは2行目を指定しているので、2行目の最終列になるはずです。

まぁ、行は無視して、列だけをB~Dに限定したいという意味として解釈するなら…
セルの列番号を調べて、1だったら右隣のセルにし、5以上なら何もしない(?←質問文に書いてないので不明)と考えればよいでしょう。

実際には、A列が空白の場合を考慮しなくても良くなるので、Withの設定の際に、先にOffset(,1)としておいて、
 If .Columns < 5 Then .Value = a
' E列以降の場合はどう処理したいのかが不明
みたいな処理だけですむようになることでしょう。
    • good
    • 0

どう言う結果を望んでいるのか画像にして添付してみては?


あ”、写真じゃなくて画面のスクリーンショットで。
    • good
    • 0

作りが悪い。


とりあえず値貼り付けの前に、カラムが1の場合はに2にする、ってif文を追加すればいい。
素人には難しいね。
withがなければ簡単だったけど。

スマホだと、これ以上のアドバイスはできん。
暇人を待て。
    • good
    • 0

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

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

gooドクター

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

このカテゴリの人気Q&Aランキング