Excel VBA 質問スレ Part58

■ このスレッドは過去ログ倉庫に格納されています
2018/11/19(月) 06:47:24.99ID:Qq88xGOU
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part57
https://mevius.5ch.net/test/read.cgi/tech/1536583359/
622デフォルトの名無しさん
垢版 |
2019/01/22(火) 13:00:35.87ID:/wbMKv3O
厚生省の中の人がプログラムで不正するように描いてたのってExcel?
2019/01/22(火) 14:06:11.20ID:Hs2/RF8Y
あれはファイルの更新日をいじっただけだったはず(開いて上書き保存かもしれんが)
2019/01/22(火) 16:11:53.74ID:twW7M/a9
関数間違えたって報道されてなかったっけ
2019/01/22(火) 20:39:31.87ID:J7GVb3Rk
>>621
それは静的に呼び出すということ。

動的の場合は、LoadLibraryとかGetProcAddressとかを使う話になる。

昔、調べまくってサンプル作ったことあるけど、何でも自由に動かせるものじゃなかった。
というより殆どのAPIは動かなかった記憶が。
2019/01/22(火) 20:52:29.66ID:nExxZ55X
LongPtr型とPtrSafe宣言ってそれぞれどういうときに使うんですか?
2019/01/22(火) 20:59:55.76ID:IR20P2NM
>>626
どっちも64bitでAPI呼ぶ時に使うけど、ほかの使い方は知らん
2019/01/22(火) 22:38:47.81ID:CihaJZ6+
Excelはどのくらいポリゴン表示出来るの?

1. PS並み
2. PS2並み
3. PS3並み
4. PS4並み
629デフォルトの名無しさん
垢版 |
2019/01/23(水) 00:32:34.72ID:glGBkXdT
5. PS5並み
2019/01/23(水) 00:54:57.75ID:26O4EHUh
今のPCならオートシェイプで3DレンダリングしてもPS1には楽勝だろう
2019/01/23(水) 01:22:36.39ID:xNUzgFQe
>>617
ありがとうございました!
2019/01/23(水) 03:00:22.02ID:aTlBVQjl
http://blog.livedoor.jp/genkimaru1/archives/2095759.html
2019/01/23(水) 13:19:24.15ID:dfxLcevf
闘神伝のエリスのシースルーは再現可能ということですね。
634デフォルトの名無しさん
垢版 |
2019/01/23(水) 13:59:08.25ID:b9b+73n9
>>625
馬鹿には無理
2019/01/23(水) 15:57:45.44ID:uebkOjvn
もともと「任意の」APIだったのが途中から動的に呼び出す話になってる
2019/01/23(水) 16:19:34.41ID:CpZRwgZL
回答者の連中が勝手に条件を考えて話をややこしくするのも
質問者がそれを修正しようとしないのもこのスレのお約束
2019/01/23(水) 17:37:28.67ID:uebkOjvn
だいたいDeclareなしに呼び出さなきゃいけない要件なんてあるか?
候補となるAPIの範囲なんてどう考えても限られてるだろう。
ジグネチャ情報ごと外部からもらうのか?
2019/01/23(水) 21:06:47.46ID:e5qX8jhS
>>637
プラグインdllを呼び出すような要件だな。
プラグインdllを指定のフォルダに入れてもらうようにしておいて、呼び出し方はこちらで決めておく。
指定フォルダからdllファイルを列挙して、ファイル名と、決められた通りの呼び出し方で呼び出すやり方になるからDeclareは使えない。

まあ、めったに無いだろう。

>>635
「任意」の意味がよく分からん。
動かしている最中に「任意」のAPIを呼び出したいという意味かと思った。
それともcdecl呼び出しのAPIは基本的に出来ないっていうような話をすれば良かった?
まあ、DispCallFuncでゴニョゴニョで出来るんだけども。
2019/01/23(水) 22:47:22.53ID:9/VHRHNs
VBAでは(トリッキーなことしないと)作れない引数型のAPIのこととかじゃね?
640デフォルトの名無しさん
垢版 |
2019/01/24(木) 09:54:58.66ID:9Yy7hd5n
初歩的かもしれない質問でお恥ずかしいのですが、知恵をお貸しいただきたいです。

1年の中で最大の数値が含まれる日付の値全てを別シートに貼り付けるというVBAプログラムを作成したいです。
また、この場合の1日とは前後1日分ではなく、その時間が含まれる1日の事です。

例えば、30分毎の売り上げ金額が入力されたexcelシートが1年分あるとします。

1年間の中で最大の売り上げ金額が、2018/2/14 12:30に存在すると仮定します。

その場合に、2018/2/14 0:00〜 2018/2/14 23:30
の値を抜き出し、別シートに貼り付けるというプログラムを作成したいです。

データの形は、

2018/2/14 0:00 300
2018/2/14 0:30 200



2018/2/14 23:30 500

のようになっています

自分でも一通り調べてみたのですが、どうしてもしっくり来るものが見つかりませんでした。

どうぞよろしくお願い致します。
641デフォルトの名無しさん
垢版 |
2019/01/24(木) 12:17:49.04ID:6DEMoFXg
>>638
おまえは頭が悪くて他人にものを教えられる様な人間やない
ちゅう事をそろそろ思い知った方が幸せになれるで
2019/01/24(木) 12:27:34.76ID:kIY0kOtD
>>640
問題を分割して考えよう

1. 最大の値を持つ行(と言うか日時)を取得する → 最大日時とする
2. 以下を最初の行から最後の行までループする
2.1 行が持つ日時と最大日時の日付部分だけ比較する
2.2 日付部分が合致してたらコピーする

で、どこがわからないの?
643デフォルトの名無しさん
垢版 |
2019/01/24(木) 12:37:36.92ID:6BCdjRMd
調べるだけで頭を使っていないのだからわかるわけない
ゆとり教育世代にありがち
2019/01/24(木) 12:38:49.74ID:FgOMH45t
>>641
自分が頭が良いということを全く証明もせずに絡んで来られても困るんだがw

こういう絡み方で頭悪そうだとは思うけどね。
645デフォルトの名無しさん
垢版 |
2019/01/24(木) 12:55:51.34ID:6DEMoFXg
実にバカらしい困り方やね
646デフォルトの名無しさん
垢版 |
2019/01/24(木) 13:12:21.15ID:Ay2CLdQj
>>643
マウント取りたいだけの老害
なんの生産性もないからやめた方がいいよ
647デフォルトの名無しさん
垢版 |
2019/01/24(木) 13:13:31.30ID:+O0AGYtG
hoge.dll だけあるときに hoge.def を作りたいんだけどどうすればいい?
648デフォルトの名無しさん
垢版 |
2019/01/24(木) 13:38:55.05ID:pEQDGUsa
>>646
悔しかったか、ゆとり世代
649デフォルトの名無しさん
垢版 |
2019/01/24(木) 14:52:02.40ID:DfMDGTcZ
>>642
おっしゃる通り1つずつこなしていきたいと思います。

最大値を取得する所まではなんとかなりましたが、最大値が入っているセルの左からoffsetによって値の取得をしようとしています。しかしエラーが出てしまい(91エラー)詰まっています。
2019/01/24(木) 14:57:02.89ID:xR9TqB96
>>647
defファイルってビルドの時に使うもんだけど?
651デフォルトの名無しさん
垢版 |
2019/01/24(木) 15:26:49.03ID:ou4FYlNm
>>649
馬鹿過ぎだろ
もっと悩んでから来い、ゆとり
2019/01/24(木) 15:36:46.38ID:xR9TqB96
罵倒芸術?
653デフォルトの名無しさん
垢版 |
2019/01/24(木) 15:53:26.03ID:DfMDGTcZ
>>651
そうします
ありがとうございます
2019/01/24(木) 16:52:58.88ID:90ICJGKL
>>651
お前なにしにきてんだここに。
最低だな、人として。
2019/01/24(木) 17:31:43.23ID:uc3iE4iQ
>>642で答えを教えてもらっても理解できないような頭の悪さが問題だろう。こんな頭の悪い奴はプログラムするなと俺は思う。
656デフォルトの名無しさん
垢版 |
2019/01/24(木) 17:52:28.54ID:Ay2CLdQj
ほー
>>655くらいの天才になると最初からプログラム完璧に理解できたらしいな
凄い凄い

>>653
めげずに頑張ってくれよ
だれでも最初は初心者だ
2019/01/24(木) 18:00:27.00ID:A3Pe4Ldy
VB6で作ったADOを使ってデータベースからエクセルシート名をComboBoxに入れるソフトがあって、それをwindows10で動かすとエラーで止まるんだけど原因分かりますか?
シート名が一文字の時だけエラーが出るのは分かったけど何か理由だと思いますか?
658デフォルトの名無しさん
垢版 |
2019/01/24(木) 18:15:16.93ID:pEQDGUsa
>>657
ここが何のスレだかわかってるか、馬鹿
2019/01/24(木) 18:58:14.37ID:5lzQ1hz1
>>640
その日付でアドバンスフィルタ。
検索する側の日付と、検索される側の日付は、
何型でもいいから統一する。
LeftやMidと"/"を組み合わせとか、
Format(日付, "yyyy/mm/dd")とか適当に。
2019/01/24(木) 19:06:26.31ID:5lzQ1hz1
アドバンスフィルタが何なのかわからなかったら、
フィルタオプションの設定の使い方を覚えて、
マクロの自動記録をするといい。

ちなみに、ループより激速だから。
2019/01/24(木) 19:32:10.91ID:fZR3dOZW
>>640-642
Ruby で作った

# 各行は空白で区切った、3列の配列。
# 全行は各行の配列、つまり配列の配列
all_rows = File.readlines( "input.txt" ).map( &:split )

# row[ 2 ]、金額が最大数値の行を求める
p max_row = all_rows.sort_by { |row| row[ 2 ].to_i }.last

# 全行からrow[ 0 ]、同じ日付の行だけを集める
p all_rows.select { |row| row[ 0 ] == max_row[ 0 ] }
2019/01/24(木) 21:13:39.94ID:52bEuJTy
>>661
ここが何のスレだかわかってるか、馬鹿
663661
垢版 |
2019/01/24(木) 21:19:22.76ID:fZR3dOZW
>>661
修正

# row[ 2 ]、金額が最大数値の行を求める
>p max_row = all_rows.sort_by { |row| row[ 2 ].to_i }.last
p max_row = all_rows.sort_by { |row| row[ 2 ].to_i * -1 }.first

last だと、最後まで配列を作ってしまう。
一方、first では最初の1つだけを求めるから、速い
2019/01/24(木) 22:01:17.17ID:KN/tNrgV
>>661
ボクタンンRubyが出来るんだぞぉおエライんだ。ボクタンンを褒めろぉぉお
Rubyのスレでは褒める奴が居ないからここでエラぶりたいんだよぉお
なウスラバカ
2019/01/25(金) 09:26:57.52ID:VDjD4/gW
他言語質問スレの質問をRubyで解答するスレでもたてれば?
2019/01/25(金) 10:27:26.03ID:OaoSScvY
Rubyスレで相手にされず、ここならドヤ顔できるだろと思って来たのかw
667デフォルトの名無しさん
垢版 |
2019/01/25(金) 12:18:15.80ID:aKVOVgYE
プロさん荒ぶりまくっとってワロタw
2019/01/25(金) 12:37:49.55ID:kDiuvRrn
Ruby信者くんどこのスレでもKYだよね
669デフォルトの名無しさん
垢版 |
2019/01/25(金) 12:52:29.05ID:EnRgcOgq
dumpbin /exports hoge.dll

lib /def:hoge.def
でいけるな
2019/01/25(金) 19:43:02.79ID:EKURiA+R
DispCallFuncって最近また流行ってるの?
2019/01/26(土) 07:48:55.80ID:SzhvFgNa
Private Function getIE(arg_title As String) As InternetExplorer

こういう書き型ってどういう意味になるんですか?
普通に関数を作るなら
private fanction 関数名(ByVal 引数名 as 引数の型)
みたいな形になると思うんですが
上記にあげた例でとくに引数を()で閉じた後のas InternetExplorerの部分がよくわかりません
2019/01/26(土) 08:30:57.60ID:0//Vwm17
>>671
"as 引数の型"の意味が理解できるなら
"as InternetExplorer"は簡単に想像つくだろ
2019/01/26(土) 09:22:53.54ID:xtvWXKE/
Private Sub 関数名(引数名 As 引数の型)
Private Function 関数名(引数名 As 引数のデータ型) As 戻り値のデータ型
674デフォルトの名無しさん
垢版 |
2019/01/26(土) 09:34:59.74ID:HSTKeB2g
VBAやってるなんて恥ずかしくて言えないだろ?
2019/01/26(土) 09:38:00.59ID:+NbQI97A
>>671
中の処理を見ないとわからんけど、
そういう書き方をする場合、普通に考えたら、
getIEにInternetExplorerのオブジェクトがセットされて返ってくる。
2019/01/26(土) 09:49:01.06ID:/P2VC+Mr
タイトルバーの文字列からウィンドウを検索する関数だろ
IE操作のサンプルとして、ネットでも本でも色んな所で見かけるやつ
2019/01/26(土) 09:59:33.30ID:0//Vwm17
>>674
あらたまって「俺VBAできます」なんて言うことは無いけど
問題の解決にVBAが最善なら偏見持たずに採用するよ
2019/01/26(土) 10:13:39.98ID:54XYYYdu
初心者に優しくなろうぜ
2019/01/26(土) 10:33:16.30ID:MaEquCGy
どうしても使わなきゃならない場合にはVBAを使う
なにも理由がなければこんなもの使わない方が精神的に健全
680デフォルトの名無しさん
垢版 |
2019/01/26(土) 10:56:55.38ID:z7S/RMkn
Windows10のアップデート1809を適用したらcreateobject("InternetExplorer.application")でオートメーションエラー(実行時エラー -2125463506)が発生するようになりました。

これを回避する方法があれは教示ください。
2019/01/26(土) 11:00:34.08ID:MaEquCGy
>>680
他の言語とSeleniumを使う
2019/01/26(土) 11:08:46.81ID:+NbQI97A
>>680
参照設定もInternetExplorerMediumもダメ?
683デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:09:00.46ID:z7S/RMkn
>>681
会社の方針でOffice以外のアプリや言語は使えません。そのため、VBAのみとさせてください。
2019/01/26(土) 11:13:02.00ID:MaEquCGy
>>683
ではIEも使えないのですね?
685デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:17:13.78ID:z7S/RMkn
>>682
参照設定はInternetcontrolsとHTML object libraryを設定しています。これは適用前と変わりません。

New InternetExplorerMediumでもおなじエラーが発生します。

1809適用前の他PCでは正常に動きます。
686デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:18:26.43ID:z7S/RMkn
>>684
すみません、クロームやエッジは使えませんが、IEは可能です。
2019/01/26(土) 11:32:26.37ID:MaEquCGy
なるほど状況はわかりました

問題の検証にはまず最初に他の言語が必要です
パワーシェルの使用許可を取ってください
2019/01/26(土) 12:31:44.07ID:WRAGgpBx
>>683
マジメな話、本当にダメなのかは思い込みの部分が多いんじゃないかと思うぞ
2019/01/26(土) 12:33:07.15ID:SzhvFgNa
>>672
>>673
>>675
ありがとうございます。VBAは戻り値の型も指定できるんですね。
というか、思い出しました、C言語でも頭にstringとかintとかつけましたね。
あれが末尾に来てこういう書き方になると。
ありがとうございました。
2019/01/27(日) 07:11:52.32ID:KwlBhw9C
しかしVBAは良くて他がダメっておかしな話だな
使い勝手が違うだけで、大概の事出来ちゃうだろ
2019/01/27(日) 07:15:14.02ID:MJttX1my
>>690
VBAの利用を推奨していないのは他でもないMSだ
2019/01/27(日) 07:25:44.98ID:v6cey9sT
逆に、C#にできてVBA+APIでできないことって何がある?
2019/01/27(日) 07:37:49.03ID:94l2cllZ
ソフトウェアが端末毎に異なると動作検証の障害になるケース
2019/01/27(日) 07:53:57.32ID:e7HDIdYV
もうよそいけよ
695デフォルトの名無しさん
垢版 |
2019/01/27(日) 08:13:04.45ID:/fU4frLP
IE参照とか終わっとる
2019/01/27(日) 08:29:08.12ID:MJttX1my
>>692
そらWebアプリとかスマホアプリとかMac/Linuxとかゲームとか科学技術計算とかいくらでもある
VBA(API, COMなし)で無理なく可能、かつExcelワークシート操作が必要な場合に態々C#を使うのはそれこそ馬鹿の一つ覚えだと思うけどね
2019/01/27(日) 08:59:08.57ID:DsJJt6N4
希に、変数が定義されてませんみたいなエラーが出るんだけど、何だろう?
しかも変な位置で。

Dim a As Long : a = 1
Dim b As Long : b = 1
MsgBox a        ←普通、aにエラーが出るとしたらここだけど、
Cells(a, 1).Value = b ←なぜかこの時点で出る

Excelを再起動しても治らないんだけど、
3行目と4行目を入れ替えて、また戻すと治る。
わけわからん。
2019/01/27(日) 09:48:02.97ID:UZak3JEV
>>697
参照設定を確認かな…
2019/01/27(日) 11:10:55.75ID:RJ6yXKbG
>>697
当方、excel2010の新しいブックでテストしても何の問題もなし
2019/01/27(日) 12:04:29.48ID:5DHtGtFO
>>697
> MsgBox a
で値は表示されてるのか?
表示されてるなら値はどうなっているのか?
2019/01/27(日) 12:48:15.98ID:TaAzn7Fo
>>697
全角空白とか混ざってない?
マルチステートメントもやめよう
2019/01/27(日) 14:13:43.46ID:eEXpRKk5
マルチステートメント推進
2019/01/27(日) 15:18:35.61ID:g3iq6aIo
まじ?
2019/01/27(日) 16:30:18.65ID:DsJJt6N4
>>698
特殊なものはつかってないけど・・。

>>700
表示前にエラーになったから見てないや。

>>701
VBSで全角空白がダメなのは知ってるけど、VBAでは実行できてたので、気にしてなかった。
マルチステートメントって「:」使うやつ?
2019/01/27(日) 16:31:28.53ID:DsJJt6N4
↑途中送信しちまった。

Constは1行で書けるのに、Dimが2行になるのが嫌なので、宣言は1行にしてる。
2019/01/27(日) 16:33:56.14ID:DsJJt6N4
>>699
こっちは2013。
普通は問題ないんだよ。行を入れ替えて戻せば治るから、
構文的におかしいことも無いだろうし。
2019/01/27(日) 18:01:05.46ID:OBIAkwM2
コードのコピペをミスったとかじゃないかな
どこか編集すると大文字小文字や空白が自動的に修正されて直るとか
2019/01/27(日) 18:29:58.57ID:k4Sj+hy8
>>697
たぶんデバッグ中に宣言書いたりしたんやろ?
そう言うことするとバグる。

一旦コードコピーして、モジュール作り直せばいいよ
2019/01/27(日) 18:33:24.52ID:qv2Aznbx
そもそも1列目にはどんな数字が羅列されてるの
2019/01/28(月) 20:10:52.48ID:i9xb9DBB
1行目にデータを取って2行目に1行目を参照したmid関数を1行目と同じ数だけ用意したいのですが

Dim m As Integer
m = 1 'カウンタmを用意して1を設定
Do While Cells(m, 1) <> "" '1行目が空になるまでループ
Cells(m, 2).Formula = "=mid(" & Cells(m, 1) & ",15,5)" '2行目には真横のセルを参照したmid関数を入れる
m = m + 1
Loop

これじゃダメなんですが、4行目のmid関数をセルに代入するとき相対的にcells(m,1)を参照させていきたいんですが
どういう風に書けばいいんでしょうか?
2019/01/28(月) 20:41:36.83ID:9NcZtM+2
Cells(m, 2).Formula = "=MID(" & Cells(m, 1) & ", 15, 5)"

Cells(m, 2).FormulaR1C1 = "=MID(RC[-1], 15, 5)"
2019/01/28(月) 20:42:27.70ID:9NcZtM+2
みすった
Cells(m, 2).Formula = "=MID(" & Cells(m, 1).Address & ", 15, 5)"
2019/01/28(月) 20:47:12.92ID:i9xb9DBB
ありがとうございます、いけました!
2019/01/29(火) 18:20:14.94ID:uYHQBjCX
1から30の乱数字を5回ループした合計を出したい。
同一数字が出ることをよしとした場合のコードってどんなですか?
2019/01/29(火) 18:28:48.64ID:ywRkqTQf
>>714
For i = 1 To 5
  s = s + Int(Rnd()*30+1)
Next

細かいことを言うと、「同じ数字が出てはいけない」などの条件を付けた時点で、それは乱数じゃなくなる
2019/01/29(火) 19:08:34.73ID:+icPBYbY
>>715
> 細かいことを言うと、「同じ数字が出てはいけない」などの条件を付けた時点で、それは乱数じゃなくなる
べつに乱数が欲しいとは言ってないようだが?
2019/01/29(火) 19:40:09.62ID:dBY1qrqG
「乱数字」ってなんだ?初めて聞く言葉だゾ
2019/01/29(火) 19:42:57.71ID:LpX7EYli
日本語だと乱数、乱数字は中国語で同じ意味
2019/01/29(火) 20:05:34.32ID:KErsf3wp
つまり>>714 は中国の方ということね
2019/01/29(火) 20:10:45.02ID:aCb5tvGW
randbetween(1,30)は?
2019/01/29(火) 21:04:31.66ID:t1GGJDgX
WorksheetFunction.RandBetween
長いな
2019/01/29(火) 21:09:20.18ID:ZMlTx8zG
3D6+5とかをループ使わず一発で計算したいって質問なんじゃね?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況