他のExcelファイルからデータを集計/グラフ用のシートにコピー(Rangeって深い)

Rage(“B1:C2”).Select のような複数のセルをActiveCellで指定する方法には

ActiveCellがA1とした場合

Excel.Range(Excel.ActiveCell.Offset(0, 1), Excel.ActiveCell.Offset(1, 2)).Select

Rangeオブジェクトって深いわ。

「,」カンマで範囲が指定できるんね。やってみるもんだ。複数も範囲を複数指定もできるしね。

また、

Excel.RangeもあるけどWorkSheet.Rangeもある。

VBEでオブジェクトブラザF2でRangeを検索

ActiveCellは、Excel.ActiveCell(Excel.Application.ActiveCell)しか無い。

VBEでオブジェクトブラザF2でActiveCellを検索

以下は、完成したコード

Option Explicit
Dim pwb As Workbook, cwb As Workbook

Sub main()
    myChdir
    getXlsFile
    myCopy
End Sub

Sub myChdir()
    VBA.ChDir VBA.Replace(VBA.CurDir, "Documents", "Downloads")
End Sub

Sub getXlsFile()
    Dim x
    x = VBA.Dir("*_hitetu_kmc.xls")
    Do Until VBA.Now - VBA.FileDateTime(x) < 1 / 24
        x = Dir
    Loop
    Excel.Workbooks.Add x
    Set cwb = Excel.Workbooks(2)
    Set pwb = Excel.Workbooks(1)
End Sub

Sub myCopy()
    cwb.Worksheets("伸銅・アルミ圧延").Select
    Excel.Range("A1").Select
    Do Until Excel.ActiveCell = "はく"
        Excel.ActiveCell.Offset(1, 0).Select
    Loop
    cwb.Activate
    Excel.Range(Excel.ActiveCell.Offset(0, 1), Excel.ActiveCell.Offset(0, 7)).Select
    Selection.Copy
    pwb.Activate
    Sheets("Sheet1").Select
    Excel.Range("b1").Select
    Do Until "" = Excel.ActiveCell
        Excel.ActiveCell.Offset(1, 0).Select
    Loop
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    cwb.Close
End Sub
カテゴリー: 8 ExcelとVBEの関係、Wordとのデータ処理 Excelオブジェクト | コメントする

Youtubeの動画を移行中です

7人の方にチャンネル登録いただきます。

ありがとうございます。ホームページはそのままで、動画はこちらに統合しますのでこれからもよろしくお願いいたします。

元はこちらです。

カテゴリー: とりあえず | コメントする

いつCallを使うの?

エクセルのVBAの話し。

関数の戻り値がいらない時に「変数=関数名(引数1,引数2)」の「変数=」をCallに変える。

戻り値が要らないなら()は不要。でも、()の削除は面倒。

なら「変数=」をCallに変える。戻り値が必要になったらCallを変数=に変えるだけ。

RubyやVBAは()を強要しないから好き。

カテゴリー: Excel章立て | コメントする

名前の活用 Names

Excelでは、セル番号A1を”入学日”という文字列でA1の値を扱うことができる。例えば、Range(“A1”)をRange(“入学日”)と書く。セルの名前は、そのワークブック(Excelのファイル)内ならワークシート名を指定する必要は無い(スコープ/有効範囲はExcelのワークブック。別のワークブック/xlsファイルならワークブック名を指定すれば使える。)

セル番号をセルの名前にすることでプログラムコードに意味を付けることができる。プログラムの変数名のように使える。

ワークシート関数でセル内に数式を書く場合は、セルのアドレス同様、名前がそのまま使える。

コードを書く時は、名前リストで確認しながら該当の名前を使う。セル番号を変数のように使え、しかも見えるためプログラムが読みやすくなる。セルに入れることができるデータは浮動小数点Doubleと文字列ですのでほぼバリアント型のような変数として扱えます。

これらの名前をExcelではセルを変数のように使える。しかし、コードではRange(“講師氏名”)のように””が入れる必要がある。これは仕方がない。

カテゴリー: 12 ExcelのVBAを快適に使うためのアイデア <E> | コメントする

関数やマクロで使う便利アイデア一覧

この章では、便利な機能を説明する。

  1. 変数のように使えるExcelの名前
  2. データベースとして使えるテーブル
  3. VBAなしで作れる入力用フォーム
  4. カメラでセル結合を使わない
  5. ワークシート名や名前、表の項目名の変化をチェックする仕組
  6. 入力の補完。コードの名前とExcelの名前の分離
  7. 標準モジュールやクラスモジュールを複数のExcelファイルから使う手法
  8. アドインの利用

コードを書く時に変数名、セル名、ワークシート名、テーブル名、テーブルの項目名など多くの名前を使う。コードになるべく固有の名前が入ると読みやすくなるが、名前の変更があると正しく動作いない。また、名前が多すぎると入力のテンポが落ちる。

カテゴリー: 12 ExcelのVBAを快適に使うためのアイデア <E> | コメントする