• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBA 連続した定数配列を… その他)

ExcelVBAで連続した定数配列を取得する方法、配列数式的Replaceの使い方、シートのコピー

このQ&Aのポイント
  • ExcelVBAを使用して連続した数列を取得する方法について教えてください。
  • ExcelVBAで一括して複数の単語を置換する方法はありますか?
  • ExcelVBAでシートをコピーする方法についてご教示ください。

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

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.1

VBAは配列処理が弱いため、基本はループ。処理速度が気になるなら、セルの読み書き頻度だけ気をつければ大丈夫です。 また、置換えやコピーは「関数の仕様」なので、教科書どーり使ってあげてください。 以下にざっくり。足りなければ補足質問でどーぞ。 一) VBAに定数配列はないです。 代入頻度を減らすならStatic変数を使うといいです。書き換えを嫌うなら関数化で。 二) 1単語ずつ繰り返しです。 三) いずれも要ループです。 ・三の一 WorksheetFunctionというのもありますが全関数を使えるワケではなく、.Rowはダメです。変に小技を使うよりループした方が安全で早いです。 ・三の二 場合によっては、正規表現(RegExp)が使えます。 ・三の三 Copyはできますが、個別にリネームが必要。  sheets(S1).Copy before:=sheets(1)  sheets(1).Name = "しーと1" まぁ、手操作できるコト(記録可能)しか出来ない、くらいの認識でよいと思います。実際そんなもんなので。 詳しく知りきゃ、オブジェクトをおべんきょ。 http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.sheets_members(v=office.11).aspx

Nouble
質問者

お礼

有り難うございます。 毎度ですが、 Excelの折角の並列処理能力が 活かせないので残念です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • VBAのWorksheetFunctionの引数に配列を使いたい

    VBAにチャレンジし始めて、1ヶ月ほどの者です。 WorksheetFunctionの引数にVBAの配列を入れて計算させたいと思っています。 例えば、作業用の配列temp_arrayを定義し、temp_array()に格納した数字の平均値をWorksheetFunctionで求めるといったことです。 しかし、 Dim temp_array() As Variant Dim a As Double a = WorksheetFunction.Average(temp_array()) としても、 「実行時エラー'1004' WorksheetFunctionクラスのAverageプロパティーを取得できません」 というエラーで叱られます。 ネットで調べていると、Excelのワークシート関数には、引数として配列を扱えるものが多いとあったので、試してみています。 例えば、参考にしたのは下記のサイトの記述です。 http://www.clayhouse.jp/array/array03_d.htm もちろん、平均値を求めるぐらいなら、自分で関数をつくった方が早いのだとは思いますが、エクセルには色々な統計関数があるので、本当に配列として、WorksheetFunctionに簡単にわたせるなら、相当プログラムが楽でシンプルにできるなぁと思います。 もし、よくご存じの方がいたらアドバイスいただけませんでしょうか?

  • VBA 別シートにカウントした結果を表示したい

    VBA初心者です。 シート1で指定した単語をシート2にカウントした数を表示させたいです。 シート1のA列に100種類近い単語が縦に並んでいます。(重複している) 「りんご」「バナナ」「メロン」様々な単語があるとします。 シート2にはA列を横にした「りんご」「バナナ」「メロン」が並んでいます。(重複削除している) そのりんごなどの下に、リンゴがいくつか、バナナがいくつかをシート1からカウントした結果の数字を入れたいです。 今のところ、COUNTIFで単語を指定しているのですが、文言が増える可能性もあります。何かほかに案がありますでしょうか。 よろしくお願いいたします。

  • VBA  シート別カウント

    お世話になります。 只今、VBAでどのように複数の文言をカウントすればいいのか悩んでいます。 集計シートに、Sheet1~50までのA列にある文言をカウントしたいです。 A列には、りんご、ばなな、メロン、他50種類あるとします。 集計シートには縦に、Sheet1~50が並んでおり、 横にりんご、ばなな、メロンが横に重複削除して並んでいます。 りんごの下にカウントした数字を入れていきたいです。 現在、Cell(3,3) = WorksheetFunction.CountIF(Sheets("Sheet1").Range("A2:A100"),cells(2,2)) とマクロを組むと、一つだけしかとってこれない状態ですが、これを複数取ってくる場合はどのようにしたらよいのでしょうか。 よろしくお願いいたします。

  • 文字列変換(置換)方法について

    Selection.Replace を利用して単体の文字を置換することはできるのですが、 例えば とあるセルに りんご+みかん+めろん っていう文字列が入力されていた場合、 Selection.Replace what:="りんご" , replacement:="" をすることによって、結果、 +みかん+めろん にすることはできますが、 ++だけにするようにはできませんでしょうか。 りんご+みかん+めろん+なし+・・・・・っと 20パターンぐらいあるので、 Selection.Replace では難しいのではと思っております。 該当の文字列だけ消す処理をしたいです。 すいませんがお願いします

  • VBAでのエラーです・・。

    最近VBAマクロを本を片手に勉強しています。シートを選択するVBAを作っていて次のような記述ができないのか考えています。 dim A as String A = "sheet2,sheet3" Sheets(Array(A)).select とやると、Arrayの行で「インデックスが・・・」というエラーで落ちます。Arrayを変数で指定することができないのですが・・。なにか記述に問題があるのでしょうか?(変数Aに"sheet2", "sheet3"と値が入るようにしても結果はNGでした・・。) 宜しくお願いします。

  • Excelの連続データから数行おきのコピー

    ExcelのSheet1に連続したデータが入っています。 Sheet2はSheet1の内容を参考にしてレイアウトを変えていますが、 Sheet1で入力してある項目を参照して表示したいです。 コピーには規則性があるので、Sheet2を2項目だけ入力した後、 オートフィルで、一発で全部コピーしたいです。 VBAではなく、Sheet2に書くべき関数のコードを教えてください。 よろしくお願い致します。 ------------------------------- 連続したデータがSheet1に大量に入っています。 例   A   B    C 1 北海道 札幌市 メロン 2 青森県 八戸市 りんご 3 岩手県 盛岡市 冷麺 以下、多数あり。 Sheet2に、   A   B    C 1 北海道 札幌市 メロン 2 3 4 5 青森県 八戸市 りんご 6 7 8 9 ※ここから下をオートフィルのコピーで表示したい

  • EXCEL VBA シートの連続印刷に白黒印刷

    EXCEL VBAの初心者です。回答、指導をよろしくお願いします。EXCEL2003を使用しています。シートAとBを連続で印刷するVBAに白黒で印刷するVBAを加えたいのですが記述方法がわかりませんのでご指導お願いします。シートの連続印刷VBAは下記ですが、これでよろしいでしょうか。どなたかご指導よろしくお願いします。 Sub purint複数シート印刷() Sheets(Array("A", "B")).PrintOut End Sub

  • VBA:日付を配列に入れ別セルに転記するとデータ型が変わる

    データを別シートに転記するVBAコードを書いていて気付きました。 日付データをバリアント型の配列に入れて、再度書き出すと 21/2/2005 のように表示され、さらに日付ではなく、文字列になってしまいました。 具体的には下記のような内容です。Sheet1 の A1:A10 に 2005/2/21 のような日付が入力されています。 1. セル範囲のデータをバリアント型の配列に格納 2. 1.を別のセルへ一括転記を行う Sub TestMacro()   Dim Buf As Variant   With Sheets("Sheet1").Range("A1:A10")     Buf = .Value     '・・・(1)     .Offset(0, 3) = Buf  '・・・(2)   End With End Sub ウォッチ式で変数を確認すると(1)および(2)の時点では #05/02/21# Variant/Date型 と正しく日付として扱われているようです。しかし、転記されたセルを見てみると、「文字列で 21/2/2005 」となっているのです。 2005/2/21 が返されるものと思うのですが、なぜ、このような現象が起こるのでしょうか?何かとんでもない勘違いをしているのでしょうか? テスト環境は Win98SE + EXCEL2002 です。よろしくお願いします。

  • EXCELVBAについて質問です。

    VBAにて、全てのシートを選択しA1セルをアクティブにするコードを作りたいのですが、計算後、表示位置がばらばらになってしまいます。 Sub シートをすべて選択後A1セルへ移動() Worksheets.Select Application.Goto reference:=Range("a1"), scroll:=True Sheets(1).Select Sheets(1).Range("A1").Activate End Sub 上記のコードなのですが、非アクティブシートは移動せず、セルA1へ移動するのはアクティブシートのSheets(1)のみとなります。 ファイルにあるシート全てをA1に移動後ウィンドウもA1に移動するような命令文はあるのでしょうか?

専門家に質問してみよう