OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

excelのデータをコピーする

  • 困ってます
  • 質問No.211562
  • 閲覧数55
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 63% (81/128)

excelVBAで、他ブック(AAA)にあるシート(AA)のA列に入っているデータをBBBというブックのBBというシートのA列にそのまま移行したいのです。
そこでBBに次のように記述したのですが動作しません。
Range("[AAA]AA!A1:A700").copy Destination:=Range("A1:A700")
本当はAに入力されているものを全て、としたいのですが良く分からなかったためとりあえず700までとしてみました。
また、このモジュールが出来たら、そこから"###"という文字列だけを抜いてコピーをする、というように条件をつけたいと思っているのですが、可能でしょうか?
方法は、VBAでなくマクロでも何でも、出来れば構いません。

教えてください。よろしくお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

マクロ記録だけでは、変動する最終行と文字列を抜くのは大変でしょう。以下に書いてみました。

”/// 余分な『###』 を削除する ///” 以下の行を削除すると最初の質問のコピーだけ行います。

『文字列だけを抜いてコピー』の解釈に迷いましたが、
  『###』はコピーしない
  『###』があった行は詰める
として書いています。一旦コピーして削除しています。違っていれば補足して下さい。コピーだけなら2、3行ですが、手順を追って書いているため長くなりました。
標準モジュールに貼り付けます。

ご参考に。

Sub CopyBookOpt()
  '/// Book、Sheetを定義 ///
  Dim wb_A As Workbook   'BookAAA
  Dim ws_A As Worksheet   'BookAAA のシートAA
    Set wb_A = Workbooks("AAA.xls")
    Set ws_A = wb_A.Worksheets("AA")
  Dim wb_B As Workbook   'BookBBB
  Dim ws_B As Worksheet   'BookBBB のシートBB
    Set wb_B = Workbooks("BBB.xls")
    Set ws_B = wb_B.Worksheets("BB")

  Application.ScreenUpdating = False  '画面更新を止める

  '/// コピー範囲を設定 ///
  Dim rg_B As Range   'コピー先セル
    ws_B.Range("A:A").ClearContents  'ワークシートBBBのシートBBのA列をクリア
    Set rg_B = ws_B.Range("A1")    'コピー先はワークシートBBBのシートBBのセルA1

  '/// コピー元を定義する。A1から、最終行から上に行って登録されているセルまで ///
  Dim rg_A As Range   'コピー元セル範囲
    'A1から、最終行から上に行って登録されているセルまで
    Set rg_A = ws_A.Range("A1:A" & ws_A.Range("A65536").End(xlUp).Row)

  '/// コピー実行 ///
  rg_A.Copy rg_B

  '/// 余分な『###』を削除する ///
  Const strDel = "###"  '削除する文字
  Dim rw As Long     '行カウンタ
  Dim rwMax As Long    '最終行
  rwMax = ws_A.Range("A65536").End(xlUp).Row
  For rw = rwMax To 1 Step -1
    If Range("A" & rw).Text = strDel Then
      Range("A" & rw).Delete Shift:=xlUp
    End If
  Next

  Application.ScreenUpdating = False  '画面更新
End Sub
お礼コメント
ponpon

お礼率 63% (81/128)

どうもありがとうございます。
大変参考になりました。
早速挑戦してみます。
投稿日時 - 2002-02-05 11:35:21
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル9

ベストアンサー率 39% (21/53)

Excelのキー操作をして、「マクロの記録」すれば出来ると思います。 方法(1) A列全体を選択し、コピー&ペースト。 方法(2) 基点となるセル(A1)を選んでから、 Control + Shift + 矢印キー で範囲を指定して、それをコピー&ペースト。 ###を抜くのは、###置換して、形式を選択して貼り付けの「空白を無視して~」オプションを使えば良いのではない ...続きを読む
Excelのキー操作をして、「マクロの記録」すれば出来ると思います。

方法(1)
A列全体を選択し、コピー&ペースト。

方法(2)
基点となるセル(A1)を選んでから、 Control + Shift + 矢印キー で範囲を指定して、それをコピー&ペースト。

###を抜くのは、###置換して、形式を選択して貼り付けの「空白を無視して~」オプションを使えば良いのではないでしょうか。
補足コメント
ponpon

お礼率 63% (81/128)

一度の作業ではなくて、常に連携しておきたいのです。且つ、社内で共有するものなのですが、教えていただいた通りに"マクロの記録"を使用した場合、次回からマクロを実行させれば同じ作業を行ってくれるのでしょうか?
すみません、今までaccessプログラミングしかしてなかったのでexcelがさっぱり分かっていません。。。
補足をお願いいたします。
投稿日時 - 2002-02-04 18:04:16

  • 回答No.3
レベル9

ベストアンサー率 39% (21/53)

ANo.#1 の続きです。 私はスクリプトを書くのが苦手なので、ほとんど「マクロの記録」を小細工してます。 「マクロの記録」だと絶対座標?や名前入りで記録されるので、それを汎用的な書き方に直せばOKです。 まずは記録して、ステップインで動きを確認してみては如何でしょう? 例えば、開いているブックのSheet1に移動してA列をコピー、新しいブックに貼り付けってのはこんな感じ。 Sub ...続きを読む
ANo.#1 の続きです。

私はスクリプトを書くのが苦手なので、ほとんど「マクロの記録」を小細工してます。
「マクロの記録」だと絶対座標?や名前入りで記録されるので、それを汎用的な書き方に直せばOKです。
まずは記録して、ステップインで動きを確認してみては如何でしょう?

例えば、開いているブックのSheet1に移動してA列をコピー、新しいブックに貼り付けってのはこんな感じ。

Sub Macro1()
Sheets("Sheet1").Select
Columns("A:A").Select
Selection.Copy
Workbooks.Add
'Workbooks.Open Filename:=InputBox("Filename?")
ActiveSheet.Paste
End Sub

Sheet1ってシート名じゃなくて、2枚目のシートならSheets(2)で少し汎用的になります。
.Selectの連続を Sheets(5).Columns("A:A").Copy とかに短縮できます。
InputBoxを使えば、さらに汎用的になるのでは?
インターネット上を探せば、色んな技も見つかります。

# ANo.#1の「空白を無視して~」は、思うような動きはしないようです。
# ごめんなさい。
お礼コメント
ponpon

お礼率 63% (81/128)

どうもありがとうございます。
accessでモジュールを書くときはいつもフォームのイベントプロシージャで書いていたので、excelを見たときすごく戸惑いました。
マクロは非常に有効なツールだと感動しています。
参考になりました。どうもありがとうございました。
投稿日時 - 2002-02-05 11:39:06
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ