ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part65
https://mevius.5ch.net/test/read.cgi/tech/1584430040/
※デフォルト設定
Excel VBA 質問スレ Part66
■ このスレッドは過去ログ倉庫に格納されています
11000
2020/05/10(日) 13:43:45.00ID:Nkoph0aj445デフォルトの名無しさん
2020/06/02(火) 00:29:20.96ID:hEtyTtKQ 俺ならこうかな。
Sub サンペイグッドカメラ()
どっきりカメラのキシフォート
カメラのドイ
End Sub
Sub サンペイグッドカメラ()
どっきりカメラのキシフォート
カメラのドイ
End Sub
446デフォルトの名無しさん
2020/06/02(火) 00:35:26.89ID:0adtr6kX VBAだしそういう名前面白いかもなw
簡単だけど保守したくないやつは、もう先輩や同僚の連絡先を名前にしようかな
簡単だけど保守したくないやつは、もう先輩や同僚の連絡先を名前にしようかな
447デフォルトの名無しさん
2020/06/02(火) 01:36:20.19ID:rfJHDu9M Sub 馬鹿専用()
馬鹿には無理()
馬鹿は帰れ()
End Sub
馬鹿には無理()
馬鹿は帰れ()
End Sub
448デフォルトの名無しさん
2020/06/02(火) 02:01:31.67ID:cr7Q5ahz Sub 鱸()
鰯()
鰹()
鮪()
End Sub
鰯()
鰹()
鮪()
End Sub
449デフォルトの名無しさん
2020/06/02(火) 02:07:31.79ID:SOkkDiQ6 >>439
Ruby なら重複要素を許さない、集合を使って、
require 'set'
filenames = <<"EOT"
a/foo.txt
a/bar.txt
a/foo.txt
EOT
set = Set.new
filenames.each_line do |filename| # 1行ずつ処理する
filename.chomp! # 末尾の改行を削除する
# 同じ要素は追加できないので、追加できた時だけ、そのファイルを読み込む
p File.read( filename ) if set.add?( filename )
end
Ruby なら重複要素を許さない、集合を使って、
require 'set'
filenames = <<"EOT"
a/foo.txt
a/bar.txt
a/foo.txt
EOT
set = Set.new
filenames.each_line do |filename| # 1行ずつ処理する
filename.chomp! # 末尾の改行を削除する
# 同じ要素は追加できないので、追加できた時だけ、そのファイルを読み込む
p File.read( filename ) if set.add?( filename )
end
450デフォルトの名無しさん
2020/06/02(火) 02:24:02.46ID:cr7Q5ahz >>439
[データ]→[重複の削除] って機能あるけど
[データ]→[重複の削除] って機能あるけど
451デフォルトの名無しさん
2020/06/02(火) 04:12:46.96ID:xDFjMRpH >>439
ファイル名がリストアップされてる列があるなら
そこでまず回して重複排除したファイル名の配列 as Stringをつくればいいだけじゃ
てかその程度も思い浮かばないとなるとプログラミング向いてないような気がするわ
重複排除のプログラムって基礎の基礎でやるよ
便利な機能を使う前に順次・分岐・繰り返しでほぼほぼなんでも出来ちゃうことを学んだ方がいいわ
C言語の勉強するとそういうの鍛えられる感じする
ファイル名がリストアップされてる列があるなら
そこでまず回して重複排除したファイル名の配列 as Stringをつくればいいだけじゃ
てかその程度も思い浮かばないとなるとプログラミング向いてないような気がするわ
重複排除のプログラムって基礎の基礎でやるよ
便利な機能を使う前に順次・分岐・繰り返しでほぼほぼなんでも出来ちゃうことを学んだ方がいいわ
C言語の勉強するとそういうの鍛えられる感じする
452デフォルトの名無しさん
2020/06/02(火) 08:37:46.24ID:ZejDuh3H453デフォルトの名無しさん
2020/06/02(火) 08:39:17.76ID:ZejDuh3H >>386
まあ、プログラマ―としては糞コードの見本を強要されるわけだからねえ。
まあ、プログラマ―としては糞コードの見本を強要されるわけだからねえ。
454デフォルトの名無しさん
2020/06/02(火) 08:41:06.23ID:ZejDuh3H >>398
引数という言葉を調べてみよう。
引数という言葉を調べてみよう。
455デフォルトの名無しさん
2020/06/02(火) 09:53:39.10ID:DG4jD+ms い・・引数
456デフォルトの名無しさん
2020/06/02(火) 10:17:05.52ID:ZKdkos41 いんすう、なの?
勝手に、ひきすう、って読んでた。
勝手に、ひきすう、って読んでた。
457デフォルトの名無しさん
2020/06/02(火) 10:38:01.33ID:HxakEXb6 いんすうだと因数と間違えるから、わざとひきすうと読む慣習
458デフォルトの名無しさん
2020/06/02(火) 11:01:38.32ID:P+GfDheU ソヒキスウブンカイとかあったよねー。
459デフォルトの名無しさん
2020/06/02(火) 11:28:56.48ID:Bxw1Fg+T 淫吸だとエロい言葉に聞こえるからひきすうと読む
460デフォルトの名無しさん
2020/06/02(火) 12:59:58.61ID:86yzZ856 Sub セル2行を結合して出力()
Sheets("雛型").Select
ActiveSheet.Copy
Dim gg As Long, rr As Long
For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
Rows(gg + 1).Insert
For rr = 5 To 31
Cells(gg, rr).Resize(2).Merge
Next rr
Next gg
HorizontalAlignment = xlCenter
VerticalAlignment = xlCenter
Range("A1") = "2行を結合して出力"
End Sub
すみません、ネットで調べまくってる相変わらずのど初心者です。
セルの行挿入と結合を範囲指定して
2行を結合するのは何とか調べてできたのですが、
「セルの列挿入と結合を繰り返して
2列1行のセルにしたい」
というのができず。。ご教示頂けませんか。
理想は
「セルを2列挿入と結合をして3列1行のセルにする」や
「2列と2行の挿入と結合繰り返して2列2行のセルにする」
など、色々パターンを作りたいのですが。
ネットと入門編の本だとやはり限界を感じます。。
どなかた何卒お願いします。
Sheets("雛型").Select
ActiveSheet.Copy
Dim gg As Long, rr As Long
For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
Rows(gg + 1).Insert
For rr = 5 To 31
Cells(gg, rr).Resize(2).Merge
Next rr
Next gg
HorizontalAlignment = xlCenter
VerticalAlignment = xlCenter
Range("A1") = "2行を結合して出力"
End Sub
すみません、ネットで調べまくってる相変わらずのど初心者です。
セルの行挿入と結合を範囲指定して
2行を結合するのは何とか調べてできたのですが、
「セルの列挿入と結合を繰り返して
2列1行のセルにしたい」
というのができず。。ご教示頂けませんか。
理想は
「セルを2列挿入と結合をして3列1行のセルにする」や
「2列と2行の挿入と結合繰り返して2列2行のセルにする」
など、色々パターンを作りたいのですが。
ネットと入門編の本だとやはり限界を感じます。。
どなかた何卒お願いします。
461デフォルトの名無しさん
2020/06/02(火) 13:09:54.31ID:YHzZdfxN .resize(1,2).mergeとか
Range(rows(gg+1)rows(gg+2)).insertとか
Range(rows(gg+1)rows(gg+2)).insertとか
462デフォルトの名無しさん
2020/06/02(火) 14:39:08.29ID:cr7Q5ahz セルの結合をマクロでやる設計者ってセンスないね
463デフォルトの名無しさん
2020/06/02(火) 14:42:20.78ID:cr7Q5ahz マクロとVBAな
464デフォルトの名無しさん
2020/06/02(火) 16:30:35.51ID:wladzkcs セル結合はなあ
465デフォルトの名無しさん
2020/06/02(火) 17:14:02.72ID:3pwUYc8f vlookupとセル結合をディスってはじめてexcel使い方として一人前
466デフォルトの名無しさん
2020/06/02(火) 17:30:35.84ID:ZKdkos41 セル結合は帳票イメージでの最終手段。
467デフォルトの名無しさん
2020/06/02(火) 17:36:37.19ID:86yzZ856 セルの結合をする理由は
取引先の提出フォームが客先ごとに
1セルの結合の構成が本当に様々で8種類くらいパターンがあり
元のマクロで出した値の貼り付けが出来ないのが現状です。
なので元のマクロの1行1列のセルの値を
セルの構成を客先のに合わせたシートに出力
そのシートから客先提出フォームに値の貼りつけ
というのをやろうとしています。
取引先の提出フォームが客先ごとに
1セルの結合の構成が本当に様々で8種類くらいパターンがあり
元のマクロで出した値の貼り付けが出来ないのが現状です。
なので元のマクロの1行1列のセルの値を
セルの構成を客先のに合わせたシートに出力
そのシートから客先提出フォームに値の貼りつけ
というのをやろうとしています。
468デフォルトの名無しさん
2020/06/02(火) 17:42:54.46ID:86yzZ856469デフォルトの名無しさん
2020/06/02(火) 17:45:43.97ID:lB7mMLW8 >>468
自分で考えろ
自分で考えろ
470デフォルトの名無しさん
2020/06/02(火) 18:33:10.70ID:0adtr6kX じゃあ8種類のテンプレでよくね
471デフォルトの名無しさん
2020/06/02(火) 18:40:35.01ID:bGVvB1yX 結合したりvlookupとかしたいから、わざわざエクセル使ってるんじゃないの?
472デフォルトの名無しさん
2020/06/02(火) 18:55:17.51ID:R+Y1d9Tj セル結合された部分は別の結合とかできないから
その都度結合解除するとか
行の挿入や削除で表が壊れたり
見えなくなるプロパティがあったり
嫌な思い出しかない
その都度結合解除するとか
行の挿入や削除で表が壊れたり
見えなくなるプロパティがあったり
嫌な思い出しかない
473デフォルトの名無しさん
2020/06/02(火) 19:17:40.08ID:xDFjMRpH Application.OnKey ってプロシージャに引数渡せないのが残念だなぁ
これってキーごとにプロシージャ作らないといけないかね
これってキーごとにプロシージャ作らないといけないかね
474デフォルトの名無しさん
2020/06/02(火) 19:20:48.48ID:ZejDuh3H475デフォルトの名無しさん
2020/06/02(火) 19:31:05.26ID:0+iVbcJA Sub 列挿入()
ActiveSheet.Copy
Dim i As Long
For i = 32 To 8 Step -1
Columns(i).Insert
Next
End Sub
ここまでは何とか、、ってとこです。
後は指定したの行を全部何とか
2列1行のセルに
道のりが遠すぎる…
ActiveSheet.Copy
Dim i As Long
For i = 32 To 8 Step -1
Columns(i).Insert
Next
End Sub
ここまでは何とか、、ってとこです。
後は指定したの行を全部何とか
2列1行のセルに
道のりが遠すぎる…
476デフォルトの名無しさん
2020/06/02(火) 19:38:40.44ID:xX39KyXM データモデルに入れたデータからSQLを使ってシートに出力する方法を教えてください。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
477デフォルトの名無しさん
2020/06/03(水) 03:13:14.17ID:4xNyRocT >>475
Sub 列挿入()
ActiveSheet.Copy
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
Sub 列挿入()
ActiveSheet.Copy
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
478デフォルトの名無しさん
2020/06/03(水) 03:29:44.75ID:4xNyRocT あっ行別の列マージならRange.Merge Across:=Trueってのがあるのか初めて知ったわ
479デフォルトの名無しさん
2020/06/03(水) 17:16:57.27ID:AwTWg+pQ すいません。関数を使って集計する方法を教えていただけないでしょうか。
index matchの組み合わせもしくは、sumifもしくはindex match sumifの複合で表示させたいです。
画像の出荷と書かれたセルに関数を入れて集計したいです。
集計は参照シートの黄色で書かれた「販売+その他出荷」の合計を表示したいです。
sumifでは縦の計算になってしまい、横の足し算が出来ない印象です。
上の数字はmatchを使った際の引用条件になると思い入れました。
説明わかりづらくてすいません。関数を教えていただけないでしょうか。
具体例のエクセルは簡単に書いてますが、実際に書くエクセルはデータが膨大なものです。
なぜかindexもうまく引用できていませんでした。
https://d.kuku.lu/ca513f39a8
index matchの組み合わせもしくは、sumifもしくはindex match sumifの複合で表示させたいです。
画像の出荷と書かれたセルに関数を入れて集計したいです。
集計は参照シートの黄色で書かれた「販売+その他出荷」の合計を表示したいです。
sumifでは縦の計算になってしまい、横の足し算が出来ない印象です。
上の数字はmatchを使った際の引用条件になると思い入れました。
説明わかりづらくてすいません。関数を教えていただけないでしょうか。
具体例のエクセルは簡単に書いてますが、実際に書くエクセルはデータが膨大なものです。
なぜかindexもうまく引用できていませんでした。
https://d.kuku.lu/ca513f39a8
480デフォルトの名無しさん
2020/06/03(水) 17:19:07.42ID:bl/wSmIk >>479
死ねよ、ここは何のスレかわかっているか?
死ねよ、ここは何のスレかわかっているか?
481デフォルトの名無しさん
2020/06/03(水) 17:31:05.68ID:AwTWg+pQ すれ違いでしたか。。 別のスレで質問してみます
失礼します
失礼します
482デフォルトの名無しさん
2020/06/03(水) 18:58:22.75ID:ajKAwYcj >>481
説明が下手な質問には答えられない
説明が下手な質問には答えられない
483デフォルトの名無しさん
2020/06/03(水) 19:02:55.47ID:4xNyRocT484デフォルトの名無しさん
2020/06/03(水) 21:04:01.49ID:WzEARBto 前にも少し聞いたけど上級者はVBAどうやって作ってくもん?
そこそこボリュームのあるマクロを素人ながら作ってるんだけど
・標準モジュールにオブジェクト名付けて
そこに同じ名前のプロシージャを1つ作る
ユーザーフォームのボタンに
プロージャ名を2つや3つ並べたり
とにかくボタンに割り当ててく
コードの表示見ると凄いシンプルに見えるけど
標準モジュールが30個とかあるんだが…
自己流だと全然だめねこれ
そこそこボリュームのあるマクロを素人ながら作ってるんだけど
・標準モジュールにオブジェクト名付けて
そこに同じ名前のプロシージャを1つ作る
ユーザーフォームのボタンに
プロージャ名を2つや3つ並べたり
とにかくボタンに割り当ててく
コードの表示見ると凄いシンプルに見えるけど
標準モジュールが30個とかあるんだが…
自己流だと全然だめねこれ
485デフォルトの名無しさん
2020/06/03(水) 21:12:23.58ID:eXcAe8GC そういうのは言語関係ない
上級者のコード読むなりプログラミング技法の初歩とかを勉強せえ
上級者のコード読むなりプログラミング技法の初歩とかを勉強せえ
486デフォルトの名無しさん
2020/06/03(水) 21:16:06.03ID:jxQ4kFWw 上級者じゃないんでわからんが
数こなしていくうちに上達するんじゃね
数こなしていくうちに上達するんじゃね
487デフォルトの名無しさん
2020/06/03(水) 22:45:33.09ID:DFbqrKTL ネットで勉強してる初心者以前のレベルだけど
変数をiで宣言してるサイトが結構多いけど
テンプレ的な変数名なの?何かの略字?
変数をiで宣言してるサイトが結構多いけど
テンプレ的な変数名なの?何かの略字?
488蟻人間 ◆T6xkBnTXz7B0
2020/06/03(水) 22:54:44.44ID:fRs9+Xkd integer
489デフォルトの名無しさん
2020/06/03(水) 22:55:14.42ID:1Bet+/qH490デフォルトの名無しさん
2020/06/03(水) 22:58:16.07ID:k+INKoSh テーブル(ListObject)の指定列に計算結果値をLoopで書き込む処理を作ったんだけど、
ひどく遅延します。事象の原因と対策わかる方いたら教えてください。
・(同一シートの)テーブルの枠外だと同じ行数でも瞬時に終わります。
・計算結果じゃなくて 1 を埋め込むのでも遅い。
・再計算Off
・ためしにEnableEvents = false もやってみたけど効果なし。
3000行くらいなんですが、しばらく帰ってこない感じ。
結局式埋込に変えたんだけど、その場合だと5〜6秒くらい。
テーブルなんてそんなもん、ということであればそう認識します。
詳しい方教えてください。
ひどく遅延します。事象の原因と対策わかる方いたら教えてください。
・(同一シートの)テーブルの枠外だと同じ行数でも瞬時に終わります。
・計算結果じゃなくて 1 を埋め込むのでも遅い。
・再計算Off
・ためしにEnableEvents = false もやってみたけど効果なし。
3000行くらいなんですが、しばらく帰ってこない感じ。
結局式埋込に変えたんだけど、その場合だと5〜6秒くらい。
テーブルなんてそんなもん、ということであればそう認識します。
詳しい方教えてください。
491デフォルトの名無しさん
2020/06/03(水) 22:59:26.99ID:uWfzdzS4 >>484
モジュールが増えるのは、
他に流用するからとか、
スクロールが面倒だからとか、
そんな理由だと思うけど。
宣言は一番上派、使用する直前派。
参照設定派、CreateObject(xxx)派、
If a = True Then派、If a Then派、
色々だから気にすんなと。
モジュールが増えるのは、
他に流用するからとか、
スクロールが面倒だからとか、
そんな理由だと思うけど。
宣言は一番上派、使用する直前派。
参照設定派、CreateObject(xxx)派、
If a = True Then派、If a Then派、
色々だから気にすんなと。
492デフォルトの名無しさん
2020/06/03(水) 23:02:38.52ID:k+INKoSh >>489
iteratorが語源かと思った。
iteratorが語源かと思った。
493デフォルトの名無しさん
2020/06/03(水) 23:03:56.76ID:LXJ+6sS7 DEFINT A-Z
494デフォルトの名無しさん
2020/06/03(水) 23:35:44.50ID:6MdsocRT ループ変数にはiもよく使うけど、rとかcも割と使う。
列と行を入れ子にしてループ処理する時は、こちらの方が分かりやすい。
列と行を入れ子にしてループ処理する時は、こちらの方が分かりやすい。
495デフォルトの名無しさん
2020/06/03(水) 23:40:14.49ID:K30dfupm496デフォルトの名無しさん
2020/06/04(木) 00:05:55.74ID:k3k6AIFZ 実際の慣例ではどうなのか知らないが、i〜tまでを使うって教えられた
intのtまでってことで
まあ大抵使ってもi,j,kぐらいだと思うが
intのtまでってことで
まあ大抵使ってもi,j,kぐらいだと思うが
497デフォルトの名無しさん
2020/06/04(木) 00:09:42.42ID:L9xk6UQ0 視認性が悪いから、j とか l とか使いたくない。
なので、 i, k, n, とか適当に飛ばして使ってる。
なので、 i, k, n, とか適当に飛ばして使ってる。
498デフォルトの名無しさん
2020/06/04(木) 00:09:53.27ID:OnK1RXVm 自分は最大nまで使うよ。
i、j、k、l、m、n
i、j、k、l、m、n
499デフォルトの名無しさん
2020/06/04(木) 00:14:11.64ID:L9xk6UQ0500デフォルトの名無しさん
2020/06/04(木) 01:00:45.24ID:BD433+5i すみません、教えてください。<br>
caseの条件を変数で設定していると条件に一致しなくてelseに流れてしまいます。<br>
ベタ打ちで条件を記載した場合は、正しく処理へ流れるのですが・・・<br>
sub テスト() <br>
Dim a As String <br>
Dim temp As String
a = "みかん"
temp = "りんご"", ""みかん" 'ここはチェックボックスの選択によって可変にする予定
Select Case a
Case temp
Msgbox("冬")
Case Else
Msgbox("冬以外")
End Select
End sub
caseの条件を変数で設定していると条件に一致しなくてelseに流れてしまいます。<br>
ベタ打ちで条件を記載した場合は、正しく処理へ流れるのですが・・・<br>
sub テスト() <br>
Dim a As String <br>
Dim temp As String
a = "みかん"
temp = "りんご"", ""みかん" 'ここはチェックボックスの選択によって可変にする予定
Select Case a
Case temp
Msgbox("冬")
Case Else
Msgbox("冬以外")
End Select
End sub
501500
2020/06/04(木) 01:02:03.80ID:BD433+5i <BR>は誤って記載したので無視してください。
すみません。
すみません。
502デフォルトの名無しさん
2020/06/04(木) 01:05:29.38ID:bxYszK7T ダブルクォーテーション大好きなんだな
503デフォルトの名無しさん
2020/06/04(木) 01:09:25.97ID:22WZQRcv504デフォルトの名無しさん
2020/06/04(木) 01:47:41.43ID:OTCVkkK8 馬鹿の特徴
教えて、助けて等で始まる書き込みをする
教えて、助けて等で始まる書き込みをする
505デフォルトの名無しさん
2020/06/04(木) 02:18:53.76ID:oqMXr6z+506デフォルトの名無しさん
2020/06/04(木) 03:10:03.32ID:e1eCmfnY >>496
俺だけかな i1,i2,i3 とか、 iX,,iY, iCnt, iLoop, iStep みたいに使う
俺だけかな i1,i2,i3 とか、 iX,,iY, iCnt, iLoop, iStep みたいに使う
507デフォルトの名無しさん
2020/06/04(木) 03:52:02.37ID:e1eCmfnY508デフォルトの名無しさん
2020/06/04(木) 07:06:03.13ID:iR1nViON >>489
Fortranが始まりが正解
Fortranが始まりが正解
509デフォルトの名無しさん
2020/06/04(木) 08:16:07.75ID:i/KeU7gc ループのiはindexのiかと思ってたわ
for(i=0;i<10;i++)
value[i] = 〜〜的な
for(i=0;i<10;i++)
value[i] = 〜〜的な
510デフォルトの名無しさん
2020/06/04(木) 10:24:37.12ID:lE9Ts1od C列が変数aと同じ値で、かつD列が変数bと同じ値で、かつE列が変数cと同じ値の各行で
Z列(整数)が最大値の行の行番号を変数iに代入する方法を教えてください
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(???)
Z列(整数)が最大値の行の行番号を変数iに代入する方法を教えてください
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(???)
511デフォルトの名無しさん
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 の値となります。
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 の値となります。
512デフォルトの名無しさん
2020/06/04(木) 12:13:10.50ID:0kTawYgE >>511 の修正
Cells(r, 5).Value Then
の行は
Cells(r, 5).Value = c Then です
Cells(r, 5).Value Then
の行は
Cells(r, 5).Value = c Then です
514デフォルトの名無しさん
2020/06/04(木) 14:32:12.42ID:L9xk6UQ0 >>503
レスありがとう。
どうも同時に開いているブックに大量の関数が配置されているとListObject内でLoop入力時に遅延するみたい。再計算Offでも。
まっさらのブックにテーブル1個作ってLoop書き込みしたら瞬時だった。
そこに関数を多く含むブックを同時に開くことで、上記のテーブルで遅延が発生。特に自作関数が影響大きいみたい。
追加で開いたブックからシートを一つずつ削除→計測を繰り返したら、少しずつ早くなって、最終的に瞬時になった。
数行ならパラパラッって感じで気にしなくていいんだろうけど行数が多いとかなり待たされる。
ちなみに対象のテーブルを「範囲に変換」するとどんだけ関数を含んでいようが瞬時に書き込まれる。
こんなもんだと思うしかないのかもだけど、再計算Offでも影響を受けるのが納得いかない。
Win7 on vmwareな環境で試したので自宅のWin10でも試してみる。
レスありがとう。
どうも同時に開いているブックに大量の関数が配置されているとListObject内でLoop入力時に遅延するみたい。再計算Offでも。
まっさらのブックにテーブル1個作ってLoop書き込みしたら瞬時だった。
そこに関数を多く含むブックを同時に開くことで、上記のテーブルで遅延が発生。特に自作関数が影響大きいみたい。
追加で開いたブックからシートを一つずつ削除→計測を繰り返したら、少しずつ早くなって、最終的に瞬時になった。
数行ならパラパラッって感じで気にしなくていいんだろうけど行数が多いとかなり待たされる。
ちなみに対象のテーブルを「範囲に変換」するとどんだけ関数を含んでいようが瞬時に書き込まれる。
こんなもんだと思うしかないのかもだけど、再計算Offでも影響を受けるのが納得いかない。
Win7 on vmwareな環境で試したので自宅のWin10でも試してみる。
515デフォルトの名無しさん
2020/06/04(木) 15:52:15.99ID:MXeQjX7b おれ、昔は i , j ばかり使ってたけど、最近は回す配列の名前を反映した変数を使ってる
Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって
階層構造になってると、だいぶあとになってメンテするときに理解が遅れる
Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって
階層構造になってると、だいぶあとになってメンテするときに理解が遅れる
516デフォルトの名無しさん
2020/06/04(木) 16:42:33.52ID:9nIeytil いいね
他にもループ内の処理をそのまま関数にしてしまう方法もある
コメントを書かなくても処理の意味を関数名として記述できるし、再利用性も高まる。
おまけとしてVBAの構文にはないcontinue(処理を中断して次のループへ入る)が行える。
もしくは再帰関数を定義してfor文自体を無くすという凝った方法もある。
他にもループ内の処理をそのまま関数にしてしまう方法もある
コメントを書かなくても処理の意味を関数名として記述できるし、再利用性も高まる。
おまけとしてVBAの構文にはないcontinue(処理を中断して次のループへ入る)が行える。
もしくは再帰関数を定義してfor文自体を無くすという凝った方法もある。
517デフォルトの名無しさん
2020/06/04(木) 18:37:05.61ID:08KHEEC1 データモデルに入れたデータからSQLを使ってシートに出力する方法を教えてください。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。
518デフォルトの名無しさん
2020/06/04(木) 19:00:14.86ID:OTCVkkK8 馬鹿ではなさそうだが、しつこい教えてクレクレに呆れる
ググれよ
ググれよ
519デフォルトの名無しさん
2020/06/04(木) 19:01:01.58ID:gQJ1UXfv >ネットになかなか情報がなくて
逆にそれを探し当てる方が難しいと思うんだが・・・。
とりあえず、マクロを記録しながらMSクエリを操作すれば答えが出ると思う。
逆にそれを探し当てる方が難しいと思うんだが・・・。
とりあえず、マクロを記録しながらMSクエリを操作すれば答えが出ると思う。
520デフォルトの名無しさん
2020/06/04(木) 19:03:34.01ID:gQJ1UXfv >パワークエリ名
あ、2016以上か。
パワークエリがあるせいで、MSクエリにたどり着かなかったということか。
あ、2016以上か。
パワークエリがあるせいで、MSクエリにたどり着かなかったということか。
521デフォルトの名無しさん
2020/06/04(木) 19:43:02.85ID:ZOeL7/nf >>516
同じ処理を関数にするのはよくあることだけど、同じ処理を括るよりは意味合いで括る方が上策だと思う。
適切に関数に分けていれば、そもそもそんなに入れ子にならんだろう。
再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。
同じ処理を関数にするのはよくあることだけど、同じ処理を括るよりは意味合いで括る方が上策だと思う。
適切に関数に分けていれば、そもそもそんなに入れ子にならんだろう。
再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。
522デフォルトの名無しさん
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
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
523デフォルトの名無しさん
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とかレンジ型とか意味わからんわ…
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とかレンジ型とか意味わからんわ…
524デフォルトの名無しさん
2020/06/04(木) 22:13:08.78ID:uauxSmqO For po = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
ここはこうだったな俺の変数癖だわ
なんかもう難しすぎて勉強するよりネットで検索してパクって繋げたほうが楽な気がする
39歳からVBA覚えるって脳みそがついていかんわ
ここはこうだったな俺の変数癖だわ
なんかもう難しすぎて勉強するよりネットで検索してパクって繋げたほうが楽な気がする
39歳からVBA覚えるって脳みそがついていかんわ
525デフォルトの名無しさん
2020/06/04(木) 22:15:04.15ID:k3k6AIFZ そんな報告いらん
自分の日記スレでも立てればいい
自分の日記スレでも立てればいい
526デフォルトの名無しさん
2020/06/04(木) 22:15:05.91ID:OTCVkkK8 隙あらば馬鹿が日記を書き込む
527デフォルトの名無しさん
2020/06/04(木) 22:19:18.86ID:uauxSmqO 隙あらば馬鹿って言いにきてんの?
定期的に馬鹿としか書いてないけど
定期的に馬鹿としか書いてないけど
528デフォルトの名無しさん
2020/06/04(木) 22:22:05.20ID:i/KeU7gc そうして精神を保ってるとでも思っておこう
529デフォルトの名無しさん
2020/06/04(木) 22:43:14.91ID:OTCVkkK8 >>527
馬鹿は黙っていろよ
馬鹿は黙っていろよ
530デフォルトの名無しさん
2020/06/04(木) 22:57:09.20ID:nxAuSZLn セルにコメント挿入して中の文字色を一部だけ変えれる事って出来ますか?
strTxt=111111(vbtab)223(vbtab)8975
例えばこんな文字列の223だけ赤色、それ以外は黒色。
strTxt=111111(vbtab)223(vbtab)8975
例えばこんな文字列の223だけ赤色、それ以外は黒色。
531デフォルトの名無しさん
2020/06/04(木) 22:59:22.67ID:c/xPJE8L >>527
お前の書き込みは馬鹿の自己満足以外の何物でもないぞ
お前の書き込みは馬鹿の自己満足以外の何物でもないぞ
532デフォルトの名無しさん
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
例えばこれだと、コメントを追加して2文字目から10文字のフォント色を色番号3=赤に変える
という処理になるよ。
他にもフォント,太字斜体,サイズとか、fontクラスのものなら何でも変えれるね。
処理的には変更開始と文字数をどう特定するかだけど頑張ってね
Cells(1, 1).AddComment "あいうえおかきくけこさしすせそ"
Dim c As Excel.Characters
Set c = Cells(1, 1).Comment.Shape.TextFrame.Characters(2, 10)
c.Font.ColorIndex = 3
例えばこれだと、コメントを追加して2文字目から10文字のフォント色を色番号3=赤に変える
という処理になるよ。
他にもフォント,太字斜体,サイズとか、fontクラスのものなら何でも変えれるね。
処理的には変更開始と文字数をどう特定するかだけど頑張ってね
533デフォルトの名無しさん
2020/06/05(金) 00:27:45.38ID:2CjtUfu9 >>530
comment.shape.textFrame.characters
comment.shape.textFrame.characters
534デフォルトの名無しさん
2020/06/05(金) 00:50:59.98ID:8UrD2y10 39歳で限界とか。元々能力が低いとしか。
535デフォルトの名無しさん
2020/06/05(金) 05:51:53.87ID:td6kQI8l >>534
なんだと、このハゲ!
なんだと、このハゲ!
536デフォルトの名無しさん
2020/06/05(金) 06:27:32.36ID:YMz2fC5g >>522
一応解説すると、、、
値にはいろんな型があるけど、
文字リテラル(例:"Hello")
数値リテラル(例:123)
日付リテラル(例:#2020/6/5#)
真偽値 (例:True)
上記で構成される配列(例:Array("月","火","水") )
これらは(またはこれらの値を返す式)はイコールだけで変数にぶっ込めるけど、
これら以外はすべてオブジェクトと見なされるので、
Set 左辺=右辺
の記述で変数に代入する必要がある。
例えば、ブック、シート、といったものはすべてオブジェクト扱い。
もちろんセル範囲(Range)もオブジェクトなので、Setが必要。
範囲オブジェクトを返すには Range("アドレス記述")で表せるけどこれだと
示してくれた例のように全部書き出す必要がありコードが冗長になる。
そんなときはCells(行,列)の記述で範囲オブジェクトを返すとLoop処理で
簡潔に記述できる。
Cells(行,列)だと1セルしか表せないからRangeと組み合わせて
Range(Cells(行,列),Cells(行,列))
みたいに記述すれば指定範囲を表現できる。
または、
Cells(行,列).Resize(500,3)
みたいに記述すれば範囲サイズを拡張できる。
あとはForで行、列の変数をうまうコントロールすればOK.
理解の助けになるといいけど、、
一応解説すると、、、
値にはいろんな型があるけど、
文字リテラル(例:"Hello")
数値リテラル(例:123)
日付リテラル(例:#2020/6/5#)
真偽値 (例:True)
上記で構成される配列(例:Array("月","火","水") )
これらは(またはこれらの値を返す式)はイコールだけで変数にぶっ込めるけど、
これら以外はすべてオブジェクトと見なされるので、
Set 左辺=右辺
の記述で変数に代入する必要がある。
例えば、ブック、シート、といったものはすべてオブジェクト扱い。
もちろんセル範囲(Range)もオブジェクトなので、Setが必要。
範囲オブジェクトを返すには Range("アドレス記述")で表せるけどこれだと
示してくれた例のように全部書き出す必要がありコードが冗長になる。
そんなときはCells(行,列)の記述で範囲オブジェクトを返すとLoop処理で
簡潔に記述できる。
Cells(行,列)だと1セルしか表せないからRangeと組み合わせて
Range(Cells(行,列),Cells(行,列))
みたいに記述すれば指定範囲を表現できる。
または、
Cells(行,列).Resize(500,3)
みたいに記述すれば範囲サイズを拡張できる。
あとはForで行、列の変数をうまうコントロールすればOK.
理解の助けになるといいけど、、
537デフォルトの名無しさん
2020/06/05(金) 06:58:05.99ID:Lq81HhXC >>535
年齢を言い訳に使ってる時点で人として残念な人でしょ
年齢を言い訳に使ってる時点で人として残念な人でしょ
538デフォルトの名無しさん
2020/06/05(金) 07:40:51.89ID:oZqvF/U1 まったく最近の若者は……
539デフォルトの名無しさん
2020/06/05(金) 08:25:59.68ID:KlfmBaSN 勉強の話が出てるけど上級者だって全てを覚えているわけじゃない。
>>532のCharactersの話だって、取りあえずこの後に"("を打って見れば説明が出てくるんで、そこから推理してる。
そして推理したら実際に別でテストする。
上手く動いたら、うっすら何となく覚える。
うっすら覚えてる場合は次回も"("打ってからの推理から始まる。
それで問題は起こらないし、何回か繰り返せば完全に覚える。
丸暗記は大変だし結果的に覚えない。
>>532のCharactersの話だって、取りあえずこの後に"("を打って見れば説明が出てくるんで、そこから推理してる。
そして推理したら実際に別でテストする。
上手く動いたら、うっすら何となく覚える。
うっすら覚えてる場合は次回も"("打ってからの推理から始まる。
それで問題は起こらないし、何回か繰り返せば完全に覚える。
丸暗記は大変だし結果的に覚えない。
540デフォルトの名無しさん
2020/06/05(金) 10:36:23.39ID:fHeju+Td いや何となく覚えてたけど
541デフォルトの名無しさん
2020/06/05(金) 12:39:12.93ID:tnz6CDPA そのなんとなくでいんじゃねって話でなくて?
542デフォルトの名無しさん
2020/06/05(金) 18:45:39.76ID:IG+dLk9+ >>524
そろそろ引退したらどうですか?
そろそろ引退したらどうですか?
543デフォルトの名無しさん
2020/06/05(金) 19:01:37.97ID:7QZKDprx >>521
入れ子時の対策として言っただけで、普通は入れ子になりづらいとか急に言われても困る
あと意識せずに自然に再帰になるとかマ?
関数型以外じゃ意識しないと普通できないだろw
やるとしても配列の畳み込みメソッドぐらいなんでは?
入れ子時の対策として言っただけで、普通は入れ子になりづらいとか急に言われても困る
あと意識せずに自然に再帰になるとかマ?
関数型以外じゃ意識しないと普通できないだろw
やるとしても配列の畳み込みメソッドぐらいなんでは?
544デフォルトの名無しさん
2020/06/05(金) 20:18:14.26ID:KlfmBaSN >>543
例えば初めて再起を使った時に再起なるものなんか知らなかった。
単純に自分を呼び出せば良くね?と思って書いたら再起だった。
再起なるものを知った後でも、基本的に自分を呼び出せば良いじゃんと思う場面が殆ど。
例えば、パスを与えたらそのフォルダの下のファイルやフォルダ名を全部列挙するという関数を考える。
列挙してる中でフォルダ名取得したら、そのフォルダ名で自分を呼び出せば良いわけだ。
そうすればその呼び出しで更に配下の列挙が得られるんだから。
もっとも、このファイル列挙では最初はDir関数グローバルな動きをすると知らなかったので上手く行かなかったけど。
例えば初めて再起を使った時に再起なるものなんか知らなかった。
単純に自分を呼び出せば良くね?と思って書いたら再起だった。
再起なるものを知った後でも、基本的に自分を呼び出せば良いじゃんと思う場面が殆ど。
例えば、パスを与えたらそのフォルダの下のファイルやフォルダ名を全部列挙するという関数を考える。
列挙してる中でフォルダ名取得したら、そのフォルダ名で自分を呼び出せば良いわけだ。
そうすればその呼び出しで更に配下の列挙が得られるんだから。
もっとも、このファイル列挙では最初はDir関数グローバルな動きをすると知らなかったので上手く行かなかったけど。
545デフォルトの名無しさん
2020/06/05(金) 20:57:20.30ID:H0L/fXZL 再起って何だろう?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 秋田内陸縦貫鉄道「列車が脱線、転覆」と通報 北秋田市、萱草駅付近 [蚤の市★]
- 今年の漢字、きょう発表😉 [583597859]
- 女の子集合!
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- おまえらもうクリスマスツリー出した?
- 百合営業してるアイドル「これは営業だから…んっクチュクチュ」←これ
- (´・ω・`)ニュー速VIPのみんなへ
