Dim i As Long, c As Long, r As Long 'カウント用 Const n As Long = 2 '列挿入, 列マージ数 Const sC As Long = 8, eC As Long = 32 '開始列, 終了列 Const sR As Long = 2, eR As Long = 10 '開始行, 終了行
With Excel.Application .DisplayAlerts = False .ScreenUpdating = False End With
For c = eC To sC Step -1 For i = 1 To n - 1 Columns(c).Insert Next i Next c
For c = eC * n To sC Step -n For r = sR To eR Cells(r, c).Resize(1, n).Merge Next r Next
With Excel.Application .DisplayAlerts = True End With
End Sub 0478デフォルトの名無しさん2020/06/03(水) 03:29:44.75ID:4xNyRocT あっ行別の列マージならRange.Merge Across:=Trueってのがあるのか初めて知ったわ 0479デフォルトの名無しさん2020/06/03(水) 17:16:57.27ID:AwTWg+pQ すいません。関数を使って集計する方法を教えていただけないでしょうか。 index matchの組み合わせもしくは、sumifもしくはindex match sumifの複合で表示させたいです。
Dim r As Long,i As Long Dim a As String, b As String, c As String
For r = 5 to lsr If Cells(r,3) = a And Cells(r,4) = b And Cells(r,5) = c Then Rows(r).??? End If Next cnt
i = Application.WorksheetFunction.Max(???) 0511デフォルトの名無しさん2020/06/04(木) 12:04:02.17ID:0kTawYgE>>510 Z列の"暫定"最大値を保持する変数を使います。 Dim r As Long, i As Long Dim a As String, b As String, c As String Dim Z_v As Long '追加部分 Dim lsr As Long '定義漏れですよ lsr = 処理範囲の最終行をセット Z_v = 0 ' Z列の最大値が負になりそうなら-9999999999などとしておく For r = 5 to lsr If Cells(r, 3).Value = a And _ Cells(r, 4).Value = b And _ Cells(r, 5).Value Then If Cells(r, "Z").Value > Z_v Then ' 暫定最大値を超えたら Z_v = Cells(r, "Z").Value ' 暫定最大値を更新 i = r ' 行位置も更新 End If End If Next
最大値となる行が複数あった場合は、最初の行位置が i の値となります。 0512デフォルトの名無しさん2020/06/04(木) 12:13:10.50ID:0kTawYgE>>511 の修正 Cells(r, 5).Value Then の行は Cells(r, 5).Value = c Then です 05135102020/06/04(木) 13:00:40.05ID:lE9Ts1od>>511 ありがとうございます!いつも勉強になりますm(__)m 0514デフォルトの名無しさん2020/06/04(木) 14:32:12.42ID:L9xk6UQ0>>503 レスありがとう。 どうも同時に開いているブックに大量の関数が配置されているとListObject内でLoop入力時に遅延するみたい。再計算Offでも。 まっさらのブックにテーブル1個作ってLoop書き込みしたら瞬時だった。 そこに関数を多く含むブックを同時に開くことで、上記のテーブルで遅延が発生。特に自作関数が影響大きいみたい。 追加で開いたブックからシートを一つずつ削除→計測を繰り返したら、少しずつ早くなって、最終的に瞬時になった。 数行ならパラパラッって感じで気にしなくていいんだろうけど行数が多いとかなり待たされる。 ちなみに対象のテーブルを「範囲に変換」するとどんだけ関数を含んでいようが瞬時に書き込まれる。 こんなもんだと思うしかないのかもだけど、再計算Offでも影響を受けるのが納得いかない。 Win7 on vmwareな環境で試したので自宅のWin10でも試してみる。 0515デフォルトの名無しさん2020/06/04(木) 15:52:15.99ID:MXeQjX7b おれ、昔は i , j ばかり使ってたけど、最近は回す配列の名前を反映した変数を使ってる Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって 階層構造になってると、だいぶあとになってメンテするときに理解が遅れる 0516デフォルトの名無しさん2020/06/04(木) 16:42:33.52ID:9nIeytil いいね
再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。 0522デフォルトの名無しさん2020/06/04(木) 22:08:56.53ID:uauxSmqO Sub セル構成を2行3列に() Application.DisplayAlerts = False Application.ScreenUpdating = False j = 2 '←ここで何列おき Set rng = ActiveSheet.UsedRange For i = rng.Columns.Count To 8 Step -1 rng.Cells(10,i).Resize(10,j).EntireColumn.Insert Next Set rng = Nothing Range("G10", "I510").Merge Across:=True Range("J10", "L510").Merge Across:=True Range("M10", "O510").MergeAcross:=True Range("P10", "R510").Merge Across:=True Range("S10", "U510").Merge Across:=True Range("V10", "X510").Merge Across:=True Range("Y10", "AA510").MergeAcross:=True Range("AB10", "AD510").Merge Across:=True Range("AE10", "AG510").Merge Across:=True Range("AH10", "AJ510").Merge Across:=True 0523デフォルトの名無しさん2020/06/04(木) 22:10:21.75ID:uauxSmqO Range("AK10", "AM510").MergeAcross:=True Range("AN10", "AP510").MergeAcross:=True Range("AQ10", "AS510").Merge Across:=True Range("AT10", "AV510").Merge Across:=True Range("AW10", "AY510").MergeAcross:=True Range("AZ10", "BB510").Merge Across:=True Range("BC10", "BE510").Merge Across:=True Range("BF10", "BH510").Merge Across:=True Range("BI10", "BK510").Merge Across:=True Range("BL10", "BN510").Merge Across:=True Range("BO10", "BQ510").MergeAcross:=True Range("BR10", "BT510").Merge Across:=True Range("BU10", "BW510").MergeAcross:=True Range("BX10", "BZ510").Merge Across:=True Range("CA10", "CC510").MergeAcross:=True Dim po As Long, ro As Long For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1 Rows(po + 1).Insert For ro = 5 To 79 Cells(po, ro).Resize(2).Merge Next ro Next po HorizontalAlignment = xlCenter VerticalAlignment = xlCenter Application.DisplayAlerts = True End Sub
VBAの勉強すらしてない俺が10個くらいのサイトからパクってつなげて一応希望通り動いた setとかレンジ型とか意味わからんわ… 0524デフォルトの名無しさん2020/06/04(木) 22:13:08.78ID:uauxSmqO For po = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
例えばこんな文字列の223だけ赤色、それ以外は黒色。 0531デフォルトの名無しさん2020/06/04(木) 22:59:22.67ID:c/xPJE8L>>527 お前の書き込みは馬鹿の自己満足以外の何物でもないぞ 0532デフォルトの名無しさん2020/06/05(金) 00:25:19.46ID:fHeju+Td>>530 Cells(1, 1).AddComment "あいうえおかきくけこさしすせそ" Dim c As Excel.Characters Set c = Cells(1, 1).Comment.Shape.TextFrame.Characters(2, 10) c.Font.ColorIndex = 3