タグ

2020年9月25日のブックマーク (5件)

  • 配列研究室 STEP 3

    5.ワークシート関数の利用 ここで述べたように、Excelのワークシート関数には、引数として配列を扱えるものが結構あります。 一見「セル範囲」を指定しているように見えても、実はその範囲の値を配列として処理しているのです。 「セル範囲」というのはVBAのデータ型で言うとRangeですが、実際にRange型の引数しか指定できないのは、RANKやOFFSET、SUMIF、COUNTIF、PHONETICなどです。 一方、SUMや、VLOOKUPの「範囲」のような引数は、Range型ではなくVariant型であり、セル範囲として与えられたとしても、最終的には配列的に処理されます。さらに、セル範囲ではなく、直接配列を指定することも可能です(こちらも参照)。 これらの「配列を扱える」ワークシート関数の多くは、VBAのコードの中で、2次元までの配列を処理するために利用することができます。 たとえば、数値

    fumokmm
    fumokmm 2020/09/25
  • VBA TRANSPOSE関数で一次元データのみの二次元配列を一次元配列に変換する。 - t-hom’s diary

    VBAでは、セル範囲と配列の相互変換ができるが、たとえ1列分しか変換しなくても二次元配列となってしまう。 参考 infoment.hatenablog.com VBAJoin関数でひとつの文字列に加工しようと思ったら色々と工夫が必要なのだが、実はワークシート関数のTRANSPOSEを使うと簡単にできるという裏技がある。 たとえば次のようなデータを用意する。 これを二次元配列arrとして読み込み、Transpose関数を使って一次元配列arr2を作る。あとはJoinするだけ。 Sub 一次元データのみの二次元配列のJoin() Dim arr: arr = Range("A1:A3") Dim arr2: arr2 = WorksheetFunction.Transpose(arr) MsgBox Join(arr2, vbNewLine) End Sub 次に行データだったらどうするか。

    VBA TRANSPOSE関数で一次元データのみの二次元配列を一次元配列に変換する。 - t-hom’s diary
    fumokmm
    fumokmm 2020/09/25
  • 二次元配列でJOIN関数が使えない - Infomentのブログ ~Excel VBA奮闘記~

    かつて、範囲から値だけを抜き出して、配列に格納できることを知った私は 思いました。 「これは良いことを学んだ。指定列の値を結合する際に使えそうだ」 具体的には、こんな感じです。 Sub JoinTest() Dim seq As Variant seq = Selection MsgBox Join(seq, vbLf) End Sub イメージとして、こんな結果を期待しました。 しかし、結果はエラー終了。 長らく理由がわかりませんでしたが、偶然気が付きました。例え1列しかなくても、この配列は二次元配列であり、恐らくJoin関数は、一次元配列にしか使用できないのだと。 原因がわかれば、あとは対策するだけです。そこで、二つの方法を考えてみました。 ユーザー定義関数で結合 Joinとは名ばかりで、愚直に処理(一つずつ結合)する関数です。 Public Function Joins(seq As

    fumokmm
    fumokmm 2020/09/25
  • 名前を付けて保存ダイアログ(GetSaveAsFilename)|VBA入門

    公開日:2013年5月以前 最終更新日:2021-10-06 第75回.名前を付けて保存ダイアログ(GetSaveAsFilename) VBAで保存するExcelファイルの保存先フォルダとファイル名をあらかじめ決めておけない場合は、 ユーザーに保存先フォルダとファイル名を指定してもらう必要があります。 ユーザーに保存するフイルを指定してもらうには、 ApplicationオブジェクトのGetSaveAsFilenameメソッドを使い、 [名前を付けて保存] ダイアログボックスを表示させます。

    名前を付けて保存ダイアログ(GetSaveAsFilename)|VBA入門
    fumokmm
    fumokmm 2020/09/25
  • Loading...

    fumokmm
    fumokmm 2020/09/25