Excel VBA 質問スレ Part54

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/05/26(土) 20:37:37.74ID:Lty78diJ
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


最近プロによる書き込みが多々見うけられますが
彼らに絡むと話がこじれるので質問したい方は適当にスルーしてください


※前スレ
Excel VBA 質問スレ Part53
http://mevius.5ch.net/test/read.cgi/tech/1524823358/
2018/06/15(金) 21:03:46.01ID:0/vjvM+E
列番号を取得したいだけならSetはいらない

顧客コードは変数なの?
変数じゃなく「顧客コード」という文字列を検索したいなら

.Find(顧客コード)
ではなく
.Find("顧客コード")

と書かないと
2018/06/15(金) 21:08:13.48ID:oSOtMGkA
Cellsの使い方が間違ってるんじゃないかね
2018/06/15(金) 21:30:16.61ID:Tyymqq5a
関係無いとも思うけど、顧客コードを検索して見つからなかったらエラー出るぞ。
まずFindまでをオブジェクトに代入し、代入されたオブジェクトがNothingかどうかをチェックすべき。
2018/06/15(金) 21:31:06.68ID:Tyymqq5a
あと、変数は全て型指定すること。
299デフォルトの名無しさん
垢版 |
2018/06/15(金) 21:44:35.90ID:CUf60DnA
どうしたお前ら
いつになくまともやんけ
2018/06/15(金) 21:59:24.92ID:7Mvej+nq
よくこんな馬鹿を相手にするな
2018/06/15(金) 22:09:24.98ID:GmHYQ4ab
あーなんだ
もうSubとFunctionの話は終わっちゃったのか
ちょっと来るのが遅かったな
2018/06/15(金) 22:23:49.95ID:Z5uPnQ18
>>294
列番号ほしくてColumn付けてたんですよねー
でもSetなくしたらとりあえず実行できました・・・なんでできるようになったのか謎です

>>295
顧客コードは変数です
ユーザーフォームで入力させてそれを判別してるような形をとっています

>>300
初めて1週間ですみませんorz



型式って指定したほうがやっぱりいいんですか・・
もう1つ悩んでることあるのでちょっと書かせてください
2018/06/15(金) 22:30:35.92ID:Z5uPnQ18
ユーザーフォームで顧客コードを検索してそれを別ブックに転記したいんですけどうまくいきません
繰り返し文だと i=0 To 5 みたいに回数を決めないと思いまして、代わりにdo until使ってるんですけどバグっちゃって・・
参考にコードと表のSS貼っておきます
ご教授願います

ttps://gyazo.com/08befaf20d8d06c1c09571710d6614b6
ttp://textuploader.com/dp3p2
304デフォルトの名無しさん
垢版 |
2018/06/15(金) 22:44:11.72ID:bCJKcbox
確かウィンドウをサブクラス化し
てコールバック関数でゴニョゴニョ、、、
なんたらする時メモリーの番地が、あーたらで
それでふんくちおnを使うんだったような??。

今はこんなことしないのかな。
2018/06/15(金) 22:46:52.27ID:VwsEC8QK
Dim i
i = 0
Dim kekka
Do Until kekka = vbCancel

この辺が意味不明です。
i=0
だと定数みたいになってる。
kekkaも値自体が入ってないのに、do until kekka =2と書かれても。
(vbcancelは組込定数なので、2という数値と同じ)

型は指定した方がいいと思います。
2018/06/15(金) 22:56:21.89ID:Z5uPnQ18
>>305
単純に変数宣言したかっただけです;;

意味合いとしては、

「処理を続行しますか?」→OKだったら最初のユーザーフォームを起動させて転記する。
                →Cancelだったら転記をしてプログラムを終了。
という感じなのですが。。
307デフォルトの名無しさん
垢版 |
2018/06/15(金) 23:05:16.76ID:ft7Lb6/j
プロパティとメソッドの違いがわかりません
判別する方法とかあるんでしょうか
2018/06/15(金) 23:10:48.49ID:URw708AY
>>307
MSDNを丸暗記する
2018/06/16(土) 01:03:53.77ID:8TxUkyvA
>>307
一度新幹線に跳ねられてみればわかるかもよ
2018/06/16(土) 01:50:39.19ID:XLWdx7iL
>>307
判別して何がしたいの。
VBAなら深く意識しなくて困る事がないんだけど。
2018/06/16(土) 08:49:31.66ID:SRZbv2U9
Propertyとあるのがプロパティ
そうじゃないのがメソッドだ
312デフォルトの名無しさん
垢版 |
2018/06/16(土) 09:50:15.71ID:4sxbGcVv
>>310
本で見て疑問だったので笑
313デフォルトの名無しさん
垢版 |
2018/06/16(土) 11:32:54.10ID:XHohijVT
>>307
シンタックスシュガーというやつだよ
違いはあるともないともどっちともいえる
314デフォルトの名無しさん
垢版 |
2018/06/16(土) 13:33:23.98ID:HgejND06
シンタックス・ショッカーだって!?
2018/06/16(土) 13:40:50.38ID:YKnMAv2c
板を荒らすなよ
2018/06/16(土) 15:27:03.33ID:xcNKL0YA
>>303
クオーテーションマークでコメントアウトが出来ますので、どこでどのような処理をしたいのか書いておくと良いかもしれません。

>ユーザーフォームで顧客コードを検索して
UserForm.Valueで入力された値を参照してから該当の表内に検索をかけることになるでしょう。

>Do Until 文
Do Loop文の中でIf kekka = vbOK Thenがコメントアウトになってますのでこれは機能しません。
また、Loopを記述するより先にEnd ifで完結させないとエラーが出るはずです。

書き慣れるまでは変数宣言は上部にまとめておくのも一つの手かと思います。
317デフォルトの名無しさん
垢版 |
2018/06/16(土) 16:15:37.97ID:6YhuS6G/
サーバーに入ってきた仕事の素材を連番のフォルダを手動で管理しております
現在画像のような感じにサーバーに素材が入ったのを確認したらとなりのセルを塗りつぶすというのを手動で管理しています
それを特定のフォルダをexcelで監視させて新しいフォルダが入ったらとなりのセルを
自動で塗りつぶす、ということをvbaではできないでしょうか

可能であればコードも教えていただければ幸いです

画像url↓
https://dotup.org/uploda/dotup.org1560186.jpg
https://dotup.org/uploda/dotup.org1560191.jpg
2018/06/16(土) 16:20:58.56ID:IAJ7RXOb
Excelで管理する意味がわからない
2018/06/16(土) 16:27:38.13ID:+7qeuaiQ
そこにエクセルがあるからさ
2018/06/16(土) 16:44:06.49ID:IDYLbmOn
この程度でもお金が発生するんだから知識の安売りしちゃダメだよね
2018/06/16(土) 16:47:32.62ID:gJMjB7oX
>>317
Dir関数
322デフォルトの名無しさん
垢版 |
2018/06/16(土) 17:52:11.74ID:65EvhanH
日本企業は外注には何十万、何百万も払うのに自社の社員が書いたものはタダだと考えてる。
323デフォルトの名無しさん
垢版 |
2018/06/16(土) 18:37:23.14ID:XHohijVT
>>317
本題からはそれるけど、セルを塗りつぶすってのはセルの背景色を直接指定するんじゃなくて
条件付き書式にした方がいいと思うよ。
つまり該当セルに「1」とかの値を入力すると勝手に赤い背景色になるようにしとく。
値ならあとで利用しやすいからね。
324デフォルトの名無しさん
垢版 |
2018/06/16(土) 18:43:20.62ID:Hq2zWLFU
>>322
VBAごときに価値はない
325デフォルトの名無しさん
垢版 |
2018/06/16(土) 19:00:05.51ID:65EvhanH
>>324
VBAスレで吠えるトンスルランドの寄生虫WW
2018/06/16(土) 19:06:20.60ID:gJMjB7oX
>>323
そしてセル数のぶんだけ重くなる。
規模によるけどね。
色付けても検索とか抽出とか面倒なだけだから自分なら記号でも埋めるかな。
色付けるとすれば視認性をあげるためのオマケ。
327デフォルトの名無しさん
垢版 |
2018/06/16(土) 19:11:09.71ID:Bzc+Z3iP
わかったつもりになってUIを根底から否定してしまったプロさんw
2018/06/16(土) 19:12:46.39ID:RfKOBpI2
>>317
開始時刻から終了時刻まで一定間隔でマクロを実行するには?
http://www.max.hi-ho.ne.jp/happy/YNxv9c134.html
を使って
>>321のDir関数を使って指定のフォルダをチェック
みたいな感じで
2018/06/16(土) 19:17:02.30ID:8TxUkyvA
>>317
こんな馬鹿に管理させる馬鹿会社があるのか
2018/06/16(土) 19:27:58.07ID:+7qeuaiQ
アマチュア事務員VBAerしかいない中小企業なんてこんなもんでしょう
331デフォルトの名無しさん
垢版 |
2018/06/16(土) 21:07:12.41ID:XHohijVT
>>326
>そしてセル数のぶんだけ重くなる。
332デフォルトの名無しさん
垢版 |
2018/06/16(土) 21:08:34.68
条件付き書式だらけのワークブックなんて開くのもしんどいわw
333デフォルトの名無しさん
垢版 |
2018/06/16(土) 21:19:39.41ID:XHohijVT
>>332
条件付き書式「だらけ」?
ひとつで十分だよね?
334デフォルトの名無しさん
垢版 |
2018/06/16(土) 21:51:48.05
>>333
ああ、>>323>>317の個別の事例に特化した話だけをしていたってわけね
俺は(恐らく>>326も)てっきり>>323は一般論を話しているものと思ったよ
「本題とはそれるけど」って書いてあったからかなあ

一般論としてはセルの背景色は条件付き書式で塗りつぶすべきなんていう馬鹿な話はないから
2018/06/16(土) 22:01:21.03ID:XHohijVT
>>334
そりゃだって>>317の画像で言えばB列に条件付き書式を設定すれば十分だし、
色はおまけで値で管理したいだろう?
2018/06/16(土) 22:05:25.26ID:wwpjubpj
>>334
Excelの操作(データ整理など)で、
条件付き書式でセルの文字色や背景色を変更するのは一般的なことだと思ってたんだが、どういう点がバカなんだろ?
2018/06/16(土) 22:06:33.94ID:wwpjubpj
おっと、IDを消してる人にレスしてしまった…
2018/06/16(土) 22:13:39.48ID:+7qeuaiQ
アマチュア事務員さんの一般論とプロの一般論は異なるということだね
プロはセルに一個一個色を設定するなんてめんどくさいことはしないよ

状態が1つ変わるたびに別の状態を同期させるようなコードは手続き的で非常にメンテナンスしにくい
まずは問い合わせで解決することを考えよう
これを覚えてまた1つ賢くなったね事務員さん
2018/06/16(土) 22:21:41.19ID:KM0PBFsq
自分で考えない馬鹿には何を教えてもムダ
340デフォルトの名無しさん
垢版 |
2018/06/16(土) 22:29:39.05ID:FpzMctyH
今のエクセルは下手なVBAerが組んだらゴミの山生成するから気をつけたほうがいいのは間違いない
2018/06/16(土) 22:36:27.25ID:42mRpiCp
ブバラー
342デフォルトの名無しさん
垢版 |
2018/06/16(土) 22:43:30.84ID:Bzc+Z3iP
>>338-340
馬鹿は何も考えない方が良いんだってよプロさんw
343デフォルトの名無しさん
垢版 |
2018/06/16(土) 22:44:27.40
>>336
それも度を過ぎると再計算が走って重くなるからVBAで色を塗ってしまったほうがいいという一般論
2018/06/16(土) 23:08:33.78ID:i9Db63x3
度を過ぎたときにおこる問題を回避するのが一般論という
2018/06/16(土) 23:11:12.97ID:xo8+58G0
それは一般論の一般的な定義ではないねw
2018/06/16(土) 23:12:30.35ID:+7qeuaiQ
その程度では重くならんだろ
どんだけ巨大なモンスターブックだよ
347デフォルトの名無しさん
垢版 |
2018/06/16(土) 23:12:39.52ID:h5xcE8hP
>>342
なかなか釣れないね
2018/06/16(土) 23:26:26.09ID:XHohijVT
>>344
これはひどい
2018/06/16(土) 23:52:20.14ID:IDYLbmOn
重くなってから考えればいいと思うよ
仕様で決めたこと以外は極力手を抜こうぜ
2018/06/18(月) 01:25:50.44ID:GSr51TQd
金にならない仕事を勝手にやって問題起こして仕事増やす奴
2018/06/18(月) 02:25:09.76ID:KIJFP7i7
FileCloseとSub Procの寿命について質問です。
作業中のSafe Backupを作成しようと思い、Shift+Ctrl+Sに
@ "_01" で終わるファイル名を、"_00" でリネーム保存
A 続けて "_01"でリネーム保存して元のファイルに戻る
といった動作を割り付けています。
この@の直後の時、"_01" はプロセス上にいないと思うのですが、SafeBackup
は最後まで正常に走り、"_01" ファイルがプロセス上に戻ってくるのが不思議です。
内部的にはどのような動きになっているのでしょうか。
2018/06/18(月) 07:11:35.78ID:teiB5Dus
期間にあったものを抽出する検索ソフト作ってて、optionボタンそれぞれ1年前〜今日、2年前〜今日、全期間ってあってdateadd関数計算して全期間以外はうまく出来るのですが全期間ってどう計算したらいいですか?
353デフォルトの名無しさん
垢版 |
2018/06/18(月) 08:40:12.00ID:XqqBFg8U
>>352
ネタ?
その程度の事をここで聞かないと分からないの?
嘘だろ?
2018/06/18(月) 12:21:10.07ID:MeAHP2Rc
非建設的発言は良くないでしょ。

>>352
でも質問に情報が全く足らないな。
検索されるものは何なの?
別シートに日付のついたデータがあって、そこから検索するとか?

DateAdd使ってるのも良くわからないな。
全期間ってのは他に検索条件が無ければ全データになっちまうと思うんだが。
2018/06/18(月) 12:45:04.79ID:teiB5Dus
>>354
テキストファイルから一列ずつ検索。
instr(1,strline,txtSrchWd)
これてヒットしたら、スプリットで切って配列に入れて、(5)に入る日付と比べて正なら抽出したくてやってます。
現在の日付からそれぞれ1年、2年前は計算でうまく抽出出来ますが、全期間は一番古い日付調べておく必要があるんですか?
2018/06/18(月) 13:39:37.58ID:cd2yrKv4
>>355
全期間だから全部だろ、馬鹿なの?
それとも前提条件を全部書かない馬鹿なの?
2018/06/19(火) 00:08:08.37ID:ndSRzvjj
君vba出来るんでしょとか言われて簡単なプログラム作成任されて作ったけど管理めんどくさすぎん?
初めはここは数字しか入らんよて言われてたからisNumericだけ判定してたのに数字以外入れると止まっちゃうから漢字とか諸々の対応させられた
そんな感じで他のinputとかアウトプットの要件がころころ変わる
そして全然動かんねーとか言われるイラつく
2018/06/19(火) 00:14:52.67ID:aJgkz5DG
>>355
全期間ならば現在の日付からの計算は必要なく、一番古い日付を指定しなくともテキストファイルの最終行まで走らせれば良いのでは。
2018/06/19(火) 00:48:51.59ID:k6tS4sBE
>>357
プログラムの仕様を決めるのはあなた
あなたが使用者に対してルールに沿った入力を求めるのは当然
道具は正しく使われるから道具として機能するのであって、猿に道具を渡しても壊れて返ってくるだけ

会社の要求をどの程度受け入れるか、もう一度冷静に考えたらどうか
個人的には、猿には付き合う必要ないと思ってる
2018/06/19(火) 01:12:30.87ID:iuv9bUNx
入力規則でガチガチにしろ
2018/06/19(火) 06:09:54.39ID:Pu21NEEU
>>357
人に使わせるような真面目なツールにVBAは無謀でしょ
品質担保しようとしたら凄まじいコストがかかる
自分しか使わない、数行で終わる、使い捨ての、エクセル操作に特化したマクロがVBAのターゲット
362デフォルトの名無しさん
垢版 |
2018/06/19(火) 07:29:40.94ID:mTLBhIvR
トレードオフで論破
363デフォルトの名無しさん
垢版 |
2018/06/19(火) 07:36:01.81ID:3QD7URK7
>>307
一番簡単な方法はその都度オブジェクトブラウザで確認すること
アイコン表示されているから一目瞭然
364デフォルトの名無しさん
垢版 |
2018/06/20(水) 18:04:43.14ID:jC8iZ17h
>>357
バカほど我儘な要求を平気でするからなぁ。で、「俺は忙しいからプログラムなんて覚える暇が無いんだ、暇なヤツはいいなぁ」とか吐かしたりさぁ。

俺は「お前のオツムに合わせてたらキリがねえわバカ」ってあからさまに言ってるよ。だいたい、数字を入力するところに平気で文字を入力して「何jこれエラーとかマジやってらんない」とか。
やってらんねえのはこっちだっての!
2018/06/20(水) 18:22:57.33ID:4RNQOdaM
使い方守れない馬鹿も馬鹿だけど本気で業務システムを作ろうってんなら
誰でも使えるようにデザインする努力も必要

入力文字種を守れない馬鹿がいる環境なら自由に手入力させる余地を残すな
2018/06/20(水) 18:39:01.82ID:toz5qFyw
とりあえずドキュメントなりマニュアルなりを作って
読まん奴まではフォロー出来ないとはっきり意思表示する

そっから先は職場の人間関係の話なので何とも
2018/06/20(水) 19:02:33.02ID:qDCLfWL3
そういう人に使わせる前提のある程度しっかりした作りのアプリはエクセルみたいな非生産的なプラットフォームでは普通は作らないね
エクセルは個人用のちょっとした処理をサクッと実行したい時とかに使うといいよ
まあその個人用のちょっとした処理だと今度はPowerShellのほうが楽なんだけどな
帯に短し襷に長しってやつだ
368デフォルトの名無しさん
垢版 |
2018/06/20(水) 19:28:16.79ID:HhJafGKf
> そういう人に使わせる前提のある程度しっかりした作りのアプリ
エクセルには無理なんやなく
プロさんには無理なだけやんけw
言い訳だけは上手やねw下手やけどw
369デフォルトの名無しさん
垢版 |
2018/06/20(水) 20:43:28.89ID:cuSrC+bt
VBAでUTF-8(BOM無し)ファイルを読み書きする最速の方法は何ですか?
ADODB.Streamだと遅いしBOM無しにするための2度読み書きでさらに遅いし
2018/06/20(水) 21:27:51.31ID:M43dIS8l
>>364
数字とか入力文字列の制限とかくらいはプログラム側でエラー処理するべきだろ。
2018/06/20(水) 21:54:21.71ID:M43dIS8l
>>367
程度にもよるが普通作る。
1回動かして終わりになる場合は作らんが。
2018/06/20(水) 22:03:23.77ID:HdA5J+lc
>>369
アセンブラで最適化したDLLを作って読み込む
2018/06/20(水) 22:36:11.28ID:nVdjaZdP
>>369
nkfでBOM付けて処理して、ポスト処理で外すw
2018/06/21(木) 02:33:39.35ID:cblRaFU0
2007から2016に変えたらCSVの処理速度なんかがかなり低下した気がするんですが気のせいかな?
2018/06/21(木) 10:26:53.76ID:3AUOqUng
>>369
コードページを明示的に指定するdllを作るのがいいんじゃないか?
俺はそうしてる。自動判定なんていらん。(言い過ぎ?)
2018/06/21(木) 12:24:27.49ID:gHr1eedB
>>374
CSV言うても読み方も書かんとわからん。
workbook.openなんかはバージョン上がるにつれてどんどん遅くなってる。2003までは一瞬だったのに・・・
2018/06/21(木) 15:28:13.92ID:DWS517Dt
>>369
こいつ程度の頭でもできる最速の方法なのか?
そもそも最速の定義は何なのか。同一ハードウェア上でという前提条件があるのかないのか等々
馬鹿は考えもなしに「最高とか最速」などの用語を使いたがる
2018/06/21(木) 16:15:01.66ID:cblRaFU0
>>376
あー、基本workbook.openで開いてます…
ここで結構時間かかってるのかな
あと、セルの数字を一つ一つ計算したり置き換えたりって処理もかなり遅くなってるような
配列でまとめてとりこんで配列で吐き出すって感じの方が速いのかな

まだ色々と確認中なのですがいろんな物がこれまでよりやたら遅くなってる気がして…
2018/06/21(木) 17:46:03.54ID:G3PMV1Ez
表計算ソフトなんだかた視覚効果なんかいらないと思うんだが何故かMSはそういうのに拘りがあるようで
2018/06/21(木) 17:55:46.72ID:UNnnYLs6
それいったら殆どの機能が不要になるけど
表計算の上に無秩序に機能を拡張したコンセプトのよくわからないソフト
素人にはこういうのがいいんだよ
381デフォルトの名無しさん
垢版 |
2018/06/21(木) 19:45:05.77ID:G3PMV1Ez
>>380
スマホタブレット世代の若いヤツはそれをいいとは思わないだろ。
382デフォルトの名無しさん
垢版 |
2018/06/23(土) 22:52:17.92ID:UN4Qoivy
誰かwbsのイナズマ線を自動で引いてくれるソース書ける人いない。。。?

どこから初めていいかすら、分からない。
2018/06/23(土) 22:56:41.49ID:vvVgHLqV
>>382
まずは息を30分停める練習をしてください。
それができたら来てください。
384デフォルトの名無しさん
垢版 |
2018/06/23(土) 23:06:49.20ID:mwhtFBP0
>>382
1. WBSの入力サンプルを用意する
2. 1に基づいてイナズマ線を手動で書いてみる
3. 2に基づいてどういう入力のときにどういう出力をすればいいのか整理してパターン化する
4. 3に基づいてコーティングする
5. 4を動かして2と同様の出力になるかどうか確認する
2018/06/23(土) 23:55:59.49ID:v6rjk3zs
>>382
> どこから初めていいかすら、分からない。
流石にその状態だとこっちもどこから教えたらいいかすら、わからん
Excel 稲妻線 あたりでググって適当なアドイン使ったほうがいいんじゃね?
2018/06/24(日) 02:48:24.86ID:3S3aZNBY
Project買えばいいのに
これだからExcel陶酔者は困るんだ
2018/06/24(日) 04:38:46.13ID:YW6zASme
VBAなんだから、何はともあれマクロの記録からだろ。
388デフォルトの名無しさん
垢版 |
2018/06/24(日) 06:57:49.54ID:wKXyvT4A
VBAの本に書いてあるコードをひたすらパソコンに写経して実行してればVBAできるようになりますか?
389デフォルトの名無しさん
垢版 |
2018/06/24(日) 07:22:58.28ID:wMUJPt69
>>388
3日でオッケー
2018/06/24(日) 07:38:59.29ID:rUQ0uFRR
>>388
タイピングの能力上がるだけかな
2018/06/24(日) 07:42:37.49ID:I6qT+7Vz
>>382
まずはWBSとイナズマ線の定義を明確化して
全てはそこからだよ
2018/06/24(日) 08:59:29.02ID:OUqBUJEy
GG佐藤のせい
2018/06/24(日) 11:05:37.20ID:/GbiIoLW
ワールドビジネスサテライト?
2018/06/24(日) 11:16:27.44ID:/GbiIoLW
「イナズマ線」でググったらこんなの出ましたけど?

イナズマ線を簡単に引くExcelマクロを作りました
http://www.fin-itnews.com/entry/2015/08/12/031032
Sub イナズマ線描画()
'FreeformBuilderオブジェクトを宣言
Dim InazumaLine As FreeformBuilder
'始点を設定
Set InazumaLine
'以降の点を結んでいく
'繰り返し用変数i
Dim i As Integer
'列の位置固定用変数
'上から下にセルをなめていく。0以外の数値ならイナズマ線を引く
For i
'数値以外はスキップ
If Not () Then
'0もスキップ
ElseIf
'イナズマ線を引く(正の数なら>、負の数なら<)
Else
End If
Next i
'終点を設定
'イナズマ線を描画
'見た目の編集(青の太線)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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