No.3ベストアンサー
- 回答日時:
こんにちは
>マクロの実行に時間がかかってしまったので、
>効率の良いコードがあれば教えてほしい。
No1様の回答に1票です。
マクロは所詮マクロなので、エクセルの内部計算の方が速いです。
どうしてもマクロで処理したくて、かつ速度を向上したいのであれば・・
検索すれば、画面更新を止めるなどの方法がすぐに見つかると思います。
上記でもそれなりの効果はありますが、マクロで時間がかかるのはシートへのアクセス(=読み・書き)です。
これを減らすロジックにすれば、速度は向上します。
現状がどのような計算を行っているのか不明ですけれど・・
もしも、1セルずつ処理するような方法を取っているのなら、セル範囲でまとめて処理する方法にすることで格段に速度は向上します。
ひとつの例として、データをまとめて読んで、メモリ内で計算し、結果をまとめて返す(=記入する)などが考えられます。
ただし、メモリを必要としますので、データ量が多いような場合には、ある程度に区切って処理するなどの工夫が必要かも知れません。
No.2
- 回答日時:
Sub CheckAndCopyData()
Dim wsData As Worksheet
Dim wsFiltered As Worksheet
Dim lastRow As Long
Dim i As Long
Dim age As String
Dim gender As String
Dim ageGroup As String
Dim ageColumn As Range
Dim genderColumn As Range
Dim ageGroupColumn As Range
Dim targetRow As Long
' シートの設定
Set wsData = ThisWorkbook.Sheets("Sheet1") ' データがあるシート名を適宜変更
Set wsFiltered = ThisWorkbook.Sheets.Add ' 結果をコピーするシートを新規作成
' ヘッダー行から必要な列のインデックスを取得
Set ageColumn = wsData.Rows(1).Find("年齢", LookIn:=xlValues, LookAt:=xlWhole)
Set genderColumn = wsData.Rows(1).Find("性別", LookIn:=xlValues, LookAt:=xlWhole)
Set ageGroupColumn = wsData.Rows(1).Find("年代別区分", LookIn:=xlValues, LookAt:=xlWhole)
If ageColumn Is Nothing Or genderColumn Is Nothing Or ageGroupColumn Is Nothing Then
MsgBox "必要な列が見つかりません。", vbExclamation
Exit Sub
End If
' 最終行を取得
lastRow = wsData.Cells(wsData.Rows.Count, ageColumn.Column).End(xlUp).Row
' データのチェックとコピー
targetRow = 1 ' コピー先シートの最初の行
For i = 2 To lastRow ' 2から始める(1行目はヘッダー)
age = Trim(wsData.Cells(i, ageColumn.Column).Value)
gender = Trim(wsData.Cells(i, genderColumn.Column).Value)
ageGroup = Trim(wsData.Cells(i, ageGroupColumn.Column).Value)
' 必須項目のチェック
If age = "" Or gender = "" Or ageGroup = "" Then
' 必須項目が空白の場合は網掛けしてコピー
wsData.Rows(i).Interior.Color = RGB(255, 255, 0) ' 黄色で網掛け
' データをコピー
wsData.Rows(i).Copy wsFiltered.Rows(targetRow)
targetRow = targetRow + 1
End If
Next i
' 結果シートの整形
wsFiltered.Columns.AutoFit
' メッセージボックスで終了を通知
MsgBox "処理が完了しました。", vbInformation
End Sub
No.1
- 回答日時:
関数で処理できるような内容だと思います。
> ・…、スペースであれば網掛けを行う。
> ・網掛けをした行のみ別シートにコピペする。
この場合は、単に、
スペースがあれば、その行全体を抽出する、
でよいはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
再質問です。マクロの修正箇所を教えてください。
Excel(エクセル)
-
数字入力後他の文字等が表示される方法について
Excel(エクセル)
-
2列に入っているデータを1列で表示する関数について
Excel(エクセル)
-
-
4
【関数】スペースがいくつ入った後の文字列を取り出したい
Excel(エクセル)
-
5
Excelについて教えてください
Excel(エクセル)
-
6
エクセルで上位バイトのセルと下位バイトのセルを1つのセルにして16進数を作る方法
Excel(エクセル)
-
7
Excel 1の位の数字で処理を分岐させたい
Excel(エクセル)
-
8
Excelの表示についての質問
Excel(エクセル)
-
9
Excel 対象のセルに入力が無いとセルに入力できないようにしたい
Excel(エクセル)
-
10
Excelで、10000,20000,30000と表示されているのですが、時々10000,20000
Excel(エクセル)
-
11
Excelにて数式を使用して 工数計算をしたいのですが、 計算方法が分からないので教えて下さい。 1
Excel(エクセル)
-
12
【マクロ】顧客番号にて一致させ、情報を表へ上書きする為には
Excel(エクセル)
-
13
VBAについての質問です
Excel(エクセル)
-
14
エクセルをエクセレントに究める
Excel(エクセル)
-
15
職場の人から聞かれており、こんなことができるか教えて下さい。 vbaとかはできません。。 下記リスト
Excel(エクセル)
-
16
下記マクロでMsgBox 空白です。"の部分の メッセージボックスは現れるものの 空白です。の文字"
Excel(エクセル)
-
17
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
18
エクセルでバーコード作成し使用しているんですが、違うパソコンで同じエクセルファイルを使用したらバーコ
Excel(エクセル)
-
19
Excelの数式の効率化について
Excel(エクセル)
-
20
エクセルマクロを教えてほしい(月別のシートを一つにまとめたい)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでの並べ替えを全シートま...
-
Excel の複数シートの列幅を同...
-
文字の色も参照 VLOOKUP
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
Excelに自動で行の増減をしたい...
-
VLOOKアップ関数の結果の...
-
Excel VBA ピボットテーブルに...
-
エクセルの列の限界は255列以上...
-
VBAで繰り返しコピーしながら下...
-
【エクセル】1列のデータを交...
-
エクセルで横並びの複数データ...
-
エクセル マクロ 標準モジュー...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
列の非表示ができません
-
エクセルVBA 行追加時に自...
-
excel 複数のシートの同じ場所...
-
【マクロ】対象データを別シー...
-
【条件付き書式】countifsで複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【条件付き書式】countifsで複...
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセルマクロを教えてほしい...
-
SUMPRODUCTにて別シートのデー...
-
Excel VBA ピボットテーブルに...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
-
excel 複数のシートの同じ場所...
-
Excelに自動で行の増減をしたい...
-
スプレッドシートでindexとIMPO...
-
エクセルで横並びの複数データ...
-
エクセル複数シートのデータを...
おすすめ情報
毎年同じ作業をするので、マクロにチャレンジしたいと思っています。
参考までに自分が作成してみたマクロを貼っていますのでアドバイスをいただければ…
10行×50列でマクロを作成し動作確認したうえで、本データにて実行してみましたが、”1行目がスペースまで作業をしている?”のか時間がかかり強制終了し、一度も作業が完了していません。
Sub 過不足チェック()
'定義
Dim ws As Worksheet
Dim cell As Range
Dim lastRow As Integer
Dim lastCol As Integer
' シート名は適宜変更
Set ws = ThisWorkbook.Sheets("Sheet1")
つづく
' 範囲指定(最終行、列まで)
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row '1列目の最終行をカウント
lastCol = ws.Cells(2, Columns.Count).End(xlToLeft).Column '2行目の最終列をカウント
For Each cell In ws.Range(Cells(3, 3), Cells(lastRow, rng))
'未検査項目チェック(必須項目漏れに黄色を設定)
' A列(年齢)<30 かつ 1行目(年代別検査項目)=20 または
' A列(年齢)>=30 <40 かつ 1行目(年代別検査項目)<=30 のセルが
'空白以外なら…
つづく