• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロで計算すると遅い)

エクセルマクロで計算すると遅い

K Kazz(@JazzCorp)の回答

回答No.2

ノウミソを弱酸性の溶液でセンジョウすべし、、、

gx9wx
質問者

お礼

ありがとうございました

関連するQ&A

  • エクセルマクロ インプットボックスの使い方

    エクセル2013です。 マクロの途中で作業者にマウスで列を選択してもらい その取得した列番号を使って、いろいろ処理を行うマクロを作りました。 Sub 実験() Dim マウス選択 As Range Dim 選択列 Dim 選択月表示 Dim 質問 Dim 最終列 Dim 最終行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 On Error GoTo myError Set マウス選択 = Application.InputBox("編集したい月の列を選択してください", Type:=8) 選択列 = マウス選択.Column 選択月表示 = Cells(8, 選択列).Value 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" Else MsgBox "プログラムを中断します" Exit Sub End If ---処理内容---- myError: MsgBox "キャンセルが押されました。プログラム終了します。" End Sub 通常列を選択してくれればインプットボックス内には $V:$V などと表示されますが 行を選択されると $35:$35 などと表示され セルの一部を選択されると $D$40 などと表示されます。 行やセルを選択してもエラーなく最後まで進みますが選択した場所によっては とんでもない結果になってしまいます。 基本、列以外を選択したらメッセージボックスでアラームするか プログラムを停止させたいのですがどのような方法が有りますでしょうか? よろしくお願いします。

  • エクセルマクロ変数を使った計算式

    エクセル2003です。 Cells(標準値合計場所, 処理列).Value = "=SUM(Cells(10,処理列):Cells(最終行,処理列)" これですと、指定したセルの Cells(標準値合計場所, 処理列)には ダブルクォーテーションに囲われた間は固定編集された文字列として扱われるので =SUM(Cells(10,処理列):Cells(最終行,処理列) という文字がセットされてしまい 求めている、範囲の合計値がセットされません。 どこをどのように修正すればいいか教えてください。

  • エクセルマクロ配列で変数は使えますか

    エクセル2013です。 初めて配列を使います。 以下のように作成し思ったようにできました。 Sub 計算() '成功 Dim a As Integer Dim c As Integer Dim b(5) As Integer Dim 最終行 Dim 値列  値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To 5 b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub ただ計算する列の範囲をインプットボックスで入力した値 にしたい為以下のように改造しました。 Dim b(対象列) As Integerでエラーになります 配列には変数は使用できないのでしょうか? よろしくお願いします。 Sub 計算() '失敗 Dim a As Integer Dim c As Integer Dim b(対象列) As Integer’★ここでERRになる Dim 最終行 Dim 対象列 Dim 値列  対象列 = 22'インプットボックスで入力した値 値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To (対象列 - 17) b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub

  • エクセルマクロ行削除

    エクセル2013です。 以下の行削除マクロを作りました。 取得した 最終行が20行目として 最終列がZ列として セル Z20 の値が 1以上なら問題なく動作するのですが セル Z20 の値が 0 だとループして終了しません。 どこを修正しても、思うように動作しません。 どこを修正すれば、いいのでしょうか? よろしくお願いします。 Sub 行削除() Dim 最終行 Dim 最終列 Dim 対象行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 For 対象行 = 10 To 最終行 If Cells(対象行, 最終列) = 0 Then Rows(対象行).Delete 最終行 = 最終行 - 1 '削除により最終行が1行減ったので最終行の値を1行減らす 対象行 = 対象行 - 1 '削除により対象行が1行繰り上がったので対象行の値を1行減らす Else End If Next 対象行 Application.ScreenUpdating = True '画面切替停止解除 End Sub

  • エクセルマクロで列を削除したい

    エクセル2013です。 マクロの途中で列を削除するようにしてあります。 A列~J列、N列~Q列、T列~U列、W列~Y列を一括削除なのですが A列~J列だけは、作業者が選択した1列だけを残して削除をしたいです。 マウスで選択させて、列を指定する所までは作成できましたが 列削除の部分(★の部分)が 思うように作成できず完成できません。 アドバイスをお願いいたします。 Sub 列削除() Dim マウス選択 Dim 選択列 Dim 選択月表示 Dim 質問 On Error GoTo myError 'INPUT-BOXでキャンセルを選択した時の回避 Set マウス選択 = Application.InputBox("回覧用に編集したい月の列を選択してください", Type:=8) If マウス選択.Columns.Count > 1 Then '選択したしたのが列で有り1列であるか確認 MsgBox "選択したのは列ではありません。又は2列以上を選択しています" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If If マウス選択.Rows.Count > 1 Then '選択したのが行又はセルの場合の処理 Else MsgBox "行又はセルを選択しています。1列を選択してください" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Set マウス選択 = マウス選択.EntireColumn Debug.Print マウス選択.Address 選択列 = マウス選択.Column 'INPUT-BOXで選択した列を数字に置き換える 選択月表示 = Cells(2, 選択列).Value '選択した列の8行目のセルの値を格納 If 選択列 > 10 Then '選択したのが11列以上の場合の処理 MsgBox "11列目以降は選択できません" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" '不要列削除 ★ Union(Columns("A:J"),Columns("N:Q"), Columns("T:U"), Columns("W:Y")).Delete Else MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Exit Sub 'エラーが出なかった時のmyErrorの回避用 myError: 'INPUT-BOXでキャンセルを押した時の処理 MsgBox "キャンセルが押されました。プログラム終了します。" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub End Sub

  • エクセル 全通り出力

    Sub test01() a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得 b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得 For i = 1 To a '1行からA列最終行まで繰り返し For n = 1 To b '1行からB列最終行まで繰り返し x = x + 1 Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記 Next n Next i End Sub こちら過去の解答にあったのですが、a,b,c,dに数字が入っていて、 Eに組み合わせを出力する場合どう変えればよいのでしょうか?

  • 対話型で入力された情報にて処理を行うマクロ(続)

    ここで教えていただいた記述をバージョンアップさせたいです。 仕様と記述 1.インプットBOX-1   「対象値のある列を入力してください」   入力例:G ↓↓ 2.メッセージボックス   「列挿入しそこに転記しますか?」   YES/NO 選択 ↓↓ 3.YESの場合   インプットBOX-2   「挿入したい列を入力してください。例:H列とI列の間→H」   入力例:H   NOの場合   インプットBOX-3   「転記する列を入力してください」   入力例:J インプットBOX-1に入力された値の列を対象列として Select Caseの条件で編集して インプットBOX-2又は3に入力された値の列に転記します。 対象列にデータがあるまで処理を繰り返します。 バージョンアップさせたい内容 (1) インプットBOX-1,2,3はエクセルの列の入力なので A~IV以外の入力はエラーとして 「入力値が違います。A~IV のいずれかを入力してください。再入力しますか?」 でOKをクリックすると再入力可能に (2) インプットBOX-2 インプットBOX-1で入力した値より前の値はエラーとする 「対象列がずれます。●●以外を入力してください。再入力しますか?」 OKをクリックで再入力可能に。 例:インプットBOX-1にCと入力した場合A,B,Cはエラー   となる。●●の所にその値を表示する。 (3) インプットBOX-3 インプットBOX-1で入力した値と同じ値の場合はエラーとする。 「対象列の元の値が削除されたてしまいます。●●以外を入力してください。再入力しますか?」 OKをクリックで再入力可能に。 例:インプットBOX-1にCと入力した場合Cはエラーとなる。   ●●の所にその値を表示する。 (1)(2)(3)の記述を教えてください。お願いします。 以下が現在の記述です。 ↓↓↓ Sub ハイフン挿入02() '2010年11月24日 対象値列 = InputBox("対象値のある列を入力してください") 列挿入 = MsgBox("列挿入しそこに転記しますか?", vbYesNo) If 列挿入 = vbYes Then 転記列 = InputBox("挿入したい列を入力してください。例:H列とI列の間→H") Else 転記列 = InputBox("転記する列を入力してください") End If If 列挿入 = vbYes Then Columns(転記列).Insert Shift:=xlToRight End If 'データは2行目からの事 行 = 2 Do '対象値列にデータがあるまで繰り返す n = Cells(行, 1).Value If n = "" Then Exit Do '対象列は14文字である事 If Len(n) = 14 Then Select Case True '左2字=9X & -が無 Case Left(n, 2) = "9X" And InStr(n, "-") = 0 '3-11で編集 myStr = Left(n, 3) & "-" & Mid(n, 4) '9字目が- Case Mid(n, 9, 1) = "-" '3-5-5で編集 myStr = Left(n, 3) & "-" & Mid(n, 4, 11) '左1字=9 & -が無 Case Left(n, 1) = "9" And InStr(n, "-") = 0 '5-5-2-2で編集 myStr = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) '-が無 Case InStr(n, "-") = 0 '3-5-2-2で編集 myStr = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) 'いずれにも属さない14文字 Case Else '編集対象の値を使用する(未編集) myStr = n End Select '編集対象の値が14文字でない Else '編集対象の値を使用する(未編集) myStr = n End If Cells(行, 転記列) = myStr 行 = 行 + 1 Loop End Sub

  • エクセルマクロFor Eachの処理が長い

    エクセル2013です。 皆さんに教えていただいて以下のマクロが完成しました。 サンプルデータ 30行、7列ではあっという間に処理ができたのですが 本番環境 800行、50列ですと 処理時間が長く 青丸がくるくる回っていて、2分後にくらいで終わります。 もう少し早く処理する方法はありますでしょうか? Findで検索して、一括削除? (それはマクロでできるのでしょうか?) よろしくお願いします。 Sub 出荷済削除() Dim 対象セル As Range Dim 対象色 As Long Dim 対象色2 As Long Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 対象色 = Range("B8").Interior.Color 'セルB8の色を基準色とする 対象色2 = Range("A8").Interior.Color 'セルB8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Interior.Color = 対象色 Or 対象セル.Interior.Color = 対象色2 Then 対象セル.ClearContents Next 対象セル Application.ScreenUpdating = True '画面切替停止解除 End Sub

  • vba エクセル

    2行目から、最終行までEmptyにしたいのにならないです。 1行目はフィールド行なのに、そのままにしたいのですが 2行目から最終行は空白にしたいです。 なので Sub TEST() With Sheets("log") lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column .Range(.Cells(2, LastCol), .Cells(lastRow, LastCol)) = Empty End With End Sub としたのですが、何も起こりません。 lastRowは100、LastColは5なのですが、 このマクロを実行しても何も起こらないです。 なぜでしょうか?

  • エクセル vba セル合計

    添付表について下記の様な処理をしたいのですが途中からVBAの書き方が(セル合計)がわからず困っております。  *日別の原価計(K列のセル値)の小計(K列の最終入力行の下※k112)に計算する。 自分ではこの様を処理を考えております。 (1)商品名(G列)最終入力行の1行下を選ぶ(G112) (2) (1)の同行にある(k112)を合計算出セルとして選ぶ (3)商品名(G列)最終入力行(g112)からその列上の空欄行の1セル下(g66)を見て(要はg 112からEnd(xlUp))、その行と同じ範囲のK列(k112ーk66)を合計をする範囲として選ぶ (4) (2)の合計する範囲を(3)で算出する。 VBA素人の私では(1)~(3)までを下記の通り書きました。 Sub 原価合計求める() Dim lastrowshu As Long Dim lastrowgen As Long Dim fastrowgen As Long lastrowshu = Cells(Rows.Count, 7).End(xlUp).Row + 1 '帳票シートの商品名(G列)最終入力行+1を取得する。 lastrowgen = Cells(Rows.Count, 7).End(xlUp).Row '商品名行の最終入力 fastrowgen = Cells(lastrowgen, 7).End(xlUp).Row '商品名最終入力行から一番上 Cells(lastrowshu, 11).Select ここまでを実行すると添付ファイルでいうk112セルをselectするまではうまくいきましたが、 これ以降の(4)の合計の書き方がわかりません。 どなたか御教授願います。 あるいはもっといい方法があれば同時にご指導頂けますと幸いです。