
D3:O3,D5;O5セルに数式を組み保護をかけてありますが、誤って消去、削除された場合を考えて下記の通りマクロを組みましたが簡潔にならないでしょうか。
Sub 集計表初期設定()
Sheets("集計表").Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False '画面描画を停止
Application.EnableEvents = False 'イベント無効
Range("d3").Formula = "=IF(項目説明!$G10="""","""",項目説明!$G10)"
Range("e3").Formula = "=IF(項目説明!$G11="""","""",項目説明!$G11)"
Range("f3").Formula = "=IF(項目説明!$G12="""","""",項目説明!$G12)"
Range("g3").Formula = "=IF(項目説明!$G13="""","""",項目説明!$G13)"
Range("h3").Formula = "=IF(項目説明!$G14="""","""",項目説明!$G14)"
Range("i3").Formula = "=IF(項目説明!$G15="""","""",項目説明!$G15)"
Range("j3").Formula = "=IF(項目説明!$G16="""","""",項目説明!$G16)"
Range("k3").Formula = "=IF(項目説明!$G17="""","""",項目説明!$G17)"
Range("l3").Formula = "=IF(項目説明!$G18="""","""",項目説明!$G18)"
Range("m3").Formula = "=IF(項目説明!$G19="""","""",項目説明!$G19)"
Range("n3").Formula = "=IF(項目説明!$G20="""","""",項目説明!$G20)"
Range("o3").Formula = "=IF(項目説明!$G21="""","""",項目説明!$G21)"
Range("d5").Formula = "=IF(ISERROR(VLOOKUP(d3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(d3,記録表!$X$11:$AA$21,4,0))"
Range("e5").Formula = "=IF(ISERROR(VLOOKUP(e3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(e3,記録表!$X$11:$AA$21,4,0))"
Range("f5").Formula = "=IF(ISERROR(VLOOKUP(f3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(f3,記録表!$X$11:$AA$21,4,0))"
Range("g5").Formula = "=IF(ISERROR(VLOOKUP(g3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(g3,記録表!$X$11:$AA$21,4,0))"
Range("h5").Formula = "=IF(ISERROR(VLOOKUP(h3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(h3,記録表!$X$11:$AA$21,4,0))"
Range("i5").Formula = "=IF(ISERROR(VLOOKUP(i3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(i3,記録表!$X$11:$AA$21,4,0))"
Range("j5").Formula = "=IF(ISERROR(VLOOKUP(j3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(j3,記録表!$X$11:$AA$21,4,0))"
Range("k5").Formula = "=IF(ISERROR(VLOOKUP(k3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(k3,記録表!$X$11:$AA$21,4,0))"
Range("l5").Formula = "=IF(ISERROR(VLOOKUP(l3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(l3,記録表!$X$11:$AA$21,4,0))"
Range("m5").Formula = "=IF(ISERROR(VLOOKUP(m3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(m3,記録表!$X$11:$AA$21,4,0))"
Range("n5").Formula = "=IF(ISERROR(VLOOKUP(n3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(n3,記録表!$X$11:$AA$21,4,0))"
Range("o5").Formula = "=IF(ISERROR(VLOOKUP(o3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(o3,記録表!$X$11:$AA$21,4,0))"
ActiveSheet.Protect
Application.EnableEvents = True 'イベントを開始
Application.ScreenUpdating = True 'ちらつき防止解除
End Sub
No.3ベストアンサー
- 回答日時:
こんにちは
すでに解説されているように、一つ目の関数式が行列入換えのような形になっているので、単純にフィルコピーはできない形式ですね。
どうしてもそのままに拘るのなら、既回答のようにループで処理することになりそうです。
既に回答は出ていますけれど、ご提示の関数式を同じ内容でフィルコピー可能な形式に変えても良いのなら、まとめて入力することが可能になります。
以下は、そのような方法での一例です。
もしも、関数式を変えても良いのであるなら・・
一番目の式(3行目の式)は参照先の指定を
=INDEX(項目説明!$G10:$G21,COLUMN(A1))
のようにすることでフィルコピー可能になります。
(上記は、わかりやすくするため空白の場合の処理を除いてあります)
また、二番目の式は、ISERRORの代わりにIFERROR関数を用いることで短縮が可能です。
=IFERROR(VLOOKUP(D3,記録表!$X$11:$AA$21,4,0),"")
といった感じ。
もしもこちらでもよければ、ご提示のコードは以下のようにまとめることが可能でしょう。
Sub 集計表初期設定()
Const f = "INDEX(項目説明!$G10:$G21,COLUMN(A1))"
Const g = "=IFERROR(VLOOKUP(D3,記録表!$X$11:$AA$21,4,0),"""")"
Worksheets("集計表").Activate
Application.EnableEvents = False
ActiveSheet.Unprotect
Range("D3:O3").FormulaLocal = Replace("=IF(@="""","""",@)", "@", f)
Range("D5:O5").FormulaLocal = g
ActiveSheet.Protect
Application.EnableEvents = True
End Sub
※ 他のセルで揮発性関数や配列計算が大量に使われていなければ、たかだか20数個のセルの入力で「ちらつき」が発生するとも思えないので省略してあります。
もしも、そのような場合には、既に指摘があるように、自動計算を一時停止する方が効果的と思います。
※ 同様に「イベントの停止」も不要ではないかと推測しますが、全体の仕組みが不明なので、念のため、こちらは残してあります。
ご回答いただきありがとうございました。長いマクロが数行のコードで組めることにびっくりしています。私にはまだまだ組むことができませんが、少しずつ理解して挑戦して行きたいです。
No.2
- 回答日時:
#1
勘違い・・すみません。
試して見ましたら、行№10が列の変化で変わるのですね AutoFillで列方向にデータを作っても変化しないですね
やり方があったか記憶にないので ループで
Dim i As Integer
For i = 0 To Range("d3:o3").Count
Range("d3").Offset(, i).Formula = _
"=IF(項目説明!$G" & 10 + i & "="""","""",項目説明!$G" & 10 + i & ")"
Next
Range("d5")はOK
#1の下記はダメ 行方向と列方向が違うので Excelが変えてくれない
With Range("d3")
.Formula = "=IF(項目説明!$G10="""","""",項目説明!$G10)"
.AutoFill Destination:=Range("d3:o3")
End With
確認させていただきました。77才ボケ防止にとマクロに挑戦、長いマクロになってしまい、少しでも短めにマクロが組めないかと質問させていただきました。指定のセルに式が入力しました。ありがとうございました。
No.1
- 回答日時:
こんばんは
書き方は色々ありそうですが、
'手動計算
Application.Calculation = xlCalculationManual
With Range("d3")
.Formula = "=IF(項目説明!$G10="""","""",項目説明!$G10)"
.AutoFill Destination:=Range("d3:o3")
End With
Range("d5").Resize(, 12).Formula = _
"=IF(ISERROR(VLOOKUP(d3,記録表!$X$11:$AA$21,4,0)),"""",VLOOKUP(d3,記録表!$X$11:$AA$21,4,0))"
'自動計算
Application.Calculation = xlCalculationAutomatic
でどうでしょう
Application.EnableEvents = True 'イベントを開始
Application.ScreenUpdating = True 'ちらつき防止解除
それをするなら、Calculationを加えた方が良いかも
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
Excel マクロで For 文のインデックスを先に宣言する理由
Excel(エクセル)
-
マクロのコードを、少しでも削って短くしたい
Excel(エクセル)
-
【EXCEL】=セル&セルが上手く表示できない。
Excel(エクセル)
-
4
Excel 2019で質問があります。 計測器のデータをExcelで記録したんですが、1秒刻みで記録
Excel(エクセル)
-
5
excelの数式の書き方について。 以下のような数式をSheet1に書いています。 Sheet1のB
Excel(エクセル)
-
6
VBA エラーの件
Excel(エクセル)
-
7
入所時間(A1)と退所時間(B1)をセル(C1)に片方だけ表示したい
Excel(エクセル)
-
8
数列の数値補間
Excel(エクセル)
-
9
エクセルデーターの並び替え
Excel(エクセル)
-
10
下記エクセルの式がなぜこうなるのか理由が知りたいです。
Excel(エクセル)
-
11
ある文字を含む際に、値を返す数式についてです
Excel(エクセル)
-
12
Excelマクロ(VBA)CELL形式とA1形式の使い分け
Excel(エクセル)
-
13
エクセルでのデータの統一に関して リストを作成する際、元データをコピペでリストに転記しており、元デー
Excel(エクセル)
-
14
マクロを簡潔にしたい
Excel(エクセル)
-
15
エクセルのデータの抽出について
Excel(エクセル)
-
16
Excelでこんなことはできないでしょうか?
Excel(エクセル)
-
17
エクセル、日々の集計整理方法。(再送です。)
Excel(エクセル)
-
18
指定した数字まで累計する方法や文字例の抽出について教えてください
Excel(エクセル)
-
19
電卓は正しいのに エクセルで計算させると間違った答えです。なぜ?
Excel(エクセル)
-
20
ExcelのVLOOKUP関数
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
エクセルの2ページ目の作り方
-
5
エクセルで、変な矢印がでて、...
-
6
あるセルに特定の文字列を打つ...
-
7
VBA オリジナル関数で選択セル...
-
8
Excel 書式を関数で判断。
-
9
セル入力文字が、「右のセルに...
-
10
Excelで隣のセルと同じ内容に列...
-
11
エクセルの画面で十字マークが...
-
12
EXCELで2列を参照し、重複する...
-
13
エクセルのセル内に全角数字を...
-
14
VBAで保存しないで閉じると空の...
-
15
EXCELで2つの数値のうち大きい...
-
16
エクセルで表示形式の時刻の「0...
-
17
(Excel)あるセルに文字を入力...
-
18
グラフの横・縦項目が全部表示...
-
19
値が入っているときだけ計算結...
-
20
Excel処理について、教えて下さ...
おすすめ情報
公式facebook
公式twitter
今回、マクロが長くなるため一部省略して質問させていただきましたが、D3:O3,D5;O5セルのほかにD4:O4セルに D3:O3と同じような数式を入力しています。ご回答いただきました関数式で行った結果うまくいきました。「イベントの停止」は外しました。
4行目の数式
Range("d4").Formula = "=IF(項目説明!$h10="""","""",項目説明!$h10)"
を
Const h = "INDEX(項目説明!$H10:$H21,COLUMN(A1))"
Range("D4:O4").FormulaLocal = Replace("=IF(@="""","""",@)", "@", h)
で採用させていただきました。