Excel VBA 質問スレ Part54
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK 最近プロによる書き込みが多々見うけられますが 彼らに絡むと話がこじれるので質問したい方は適当にスルーしてください ※前スレ Excel VBA 質問スレ Part53 http://mevius.5ch.net/test/read.cgi/tech/1524823358/ 現実と願望の区別が出来ない人がいるみたいだね。 それが進むとコンピュータ使うのなんて中小ぐらいしかないなどとなる。 派遣の人にさせる雑用事務仕事ならエクセルくらいしか使えないだろうから仕方ないかな >>228 まさにこういう人の意見なんだけど、何をもってほとんど使わないと言ってるんだろう? そんなにたくさんの会社を見てるの? 入力装置としては悪くないプラットフォームだと思う もちろん神エクセルは論外だけど 小規模のテーブルデータをサクッと作るには便利 ただエクセルのままデータや文書として交換するのはやめてほしいね >>231 お前より給料貰ってるけどな。 言い訳ばかりじゃたかが知れてる。 何を言っても零細は間違いというわけだ。 ID:kgcyA64B いつものフリーターの妄想です フォームを使っていろいろ勉強しながら遊んでるんですが、コードが長ったらしくなるときはcallで別に書いてるんですが、functionの使いどころというかこういうときは絶対functionだ!ってあるんですか? 引数やら戻り値やらネットでみたりするけど使いどころがいまいちで... >>240 何度も呼び出す機能はfunction 同じ処理をコピペであちこちに書くと 直すとき大変ですし スコープが狭くなると把握しやすくなるよね >>240 むしろ関数の方が基本 ここぞというところだけプロシージャ >>242 戻りが必要なときがFunctionだと思ってた。 「ここぞ」ってどんなとき? プロシャージャから呼ばれるものは原則ファンクション。とりあえずブーリアン型にしてtrueを返してるわ プロシャージャはイベントハンドラと、ファンクションのデバッグ用くらいかなー >>244 ProcからSubProcを呼ぶのは邪道ってこと? 値の戻し方だって 関数の戻り値か、ByRef引数か、グローバル変数か、セルか、テキストファイルかは自由自在 >何度も呼び出す機能はfunction さすがプロは違うなあ >>248 Document Properyもね。 >>248 Document Properyもね。 >>250 あちゃ、Properyってなんだ? 関数のありがたみがわからない初心者のみんなは副作用、参照透過性、例外安全という観点で関数とプロシージャを比較してみよう それだけでスキルアップだ コードがグンと洗練されるぞ やったね! > 副作用、参照透過性、例外安全 最近覚えたので使いたくてしょうがないんだろうな w 頓珍漢過ぎて笑うしかないけど いつも行と列がわからなくなるんだがいい覚え方ある? 列方向とか言われると頭が混乱する >>254 Row Column それぞれの先頭文字見たら >>254 今時ほとんど横書きだから「行」と言えば横方向でしょ 一行目って言われて縦読みする奴はあまりいないし w ありがとうございます これで行列を判別できそうです >>259 そのうち君にもわかる時が来る めげずに勉強しよう 今はわからなくても大丈夫だ >>261 ごめんねー、頓珍漢な勉強なんてしたくないから w >>254 長文は3行にまとめろ この時「3列に」とは言わない これが行と列の違い まあ自分もほとんどがFunctionでSubは数えるほどだな。 Subを使うのは求める値を直接値として返すのはデカすぎるときとか。 値を戻す必要のある手続きならFunction その必要がない手続きならSub 原則的にはこれしかないわけだが Functionの戻り値以外で値を返す手続きは例外的なものに限るべき >>252 お前はVBAで、何と何を比較してるの? >>266 あぁ、それなら認識通りだわ。邪道なのかと思った。 >>268 横だが、それいいね。今目に焼き付いたわ >>266 > 値を戻す必要のある手続きならFunction > その必要がない手続きならSub 複数の値を返したい時は? > Functionの戻り値以外で値を返す手続きは例外的なものに限るべき C# の TryParse() 系の奴は例外的だと言う主張ですか? > お前はVBAで、何と何を比較してるの? そいつには触れない方がいいかと 配列かユーザー定義、あとは引数を参照にして引数で返すとか。 そのプロシージャの内容で変える。 クラスにするとか場合によっちゃコレクションに複数のクラスを入れて返すとか配列を配列に入れて返すとかする場合も。 複数かどうかではなくそのプロシージャにとってどうあるべきかが重要。 >>271 結局FunctionとSubの使い分けは値を返すかどうかなんかとは関係ないってことだよね >>242 ,>>244 ,>>252 sub も function も両方ともプロシージャです functionにした事で起こる副作用って何? 可読性とか、解析とかに影響が出るだけで、動作自体はfunctionが完全上位互換だと思ってたんだけど。 どうせグローバル変数弄るんだから、どっちも同じだろ? SubにしろFunctionにしろ、あんまり分割しすぎるのはBASIC的ではないので、可能な限りGoSubを使いましょう >>270 >>>266 >> 値を戻す必要のある手続きならFunction >> その必要がない手続きならSub >複数の値を返したい時は? 関係ないものを複数返したいなら多くの場合は設計ミス 関数の責務が複数あると考えていい 関係のあるものを複数返したい場合はそれらを含む別のクラスが隠れているのかもね 何れにせよ複数返したいと思った時点で冷静に考えを整理すべき > >> Functionの戻り値以外で値を返す手続きは例外的なものに限るべき >C# の TryParse() 系の奴は例外的だと言う主張ですか? いいとおもうよ あれはパフォーマンス追求するときと並列処理、相互運用ぐらいにしか使わん 実際にref/outを使う標準ライブラリはほとんどない ParseやTryGetValueは使用頻度が高く、例外でエラー通知するのはオーバーヘッドがあるからoutにするメリットの方が大きいと考えられて例外的に導入されたもの > >> お前はVBAで、何と何を比較してるの? >そいつには触れない方がいいかと >>280 > 何れにせよ複数返したいと思った時点で冷静に考えを整理すべき で、結局どうするのさ? > あれはパフォーマンス追求するときと並列処理、相互運用ぐらいにしか使わん ↑ ↓ > ParseやTryGetValueは使用頻度が高く 結局よく使うのか使わないのかはっきりしろよ w 無理矢理反論してるのがバレバレだぞ 入れる穴が複数あるのに出す穴が1つってのが間違ってるんだよ だから入れる穴から出す もはやプロさんによるプログラミング脱初心者講座 エクセルマクロはどこいったんや ほんま役に立たんプロさんばかりやなw >>270 あれはあくまでもVBAでのSubとFunctionの使い分けの指針な >複数の値を返したい時は? 複数の値を返したい時点で例外的な処理だと思った方がいい 複数の値が必要なら、複数の値をまとめた「何か」を一つ返すのが原則 まあ実際はそうガチガチにはやらんけどな >C# の TryParse() 系の奴は例外的だと言う主張ですか? まあ、例外的 あれは、変換が可能かどうかと、変換した値という二つの処理をまとめてるから >>274 おれもそう思ってはいるが VBAにはいまでもGoSub Return ってのがあるからなぁ >>284 説明も反論もできないなら黙ってろよ w >>286 > あれは、変換が可能かどうかと、変換した値という二つの処理をまとめてるから どうみてもその処理はまとめるべきだろ 別々にやれと言うならちょっと頭おかしい Sub 色の付いたセルの値をクリア() Dim C As Range For Each C In ActiveSheet.Range("A1:J25") If C.Interior.ColorIndex = 15 Then C.ClearContents End If Next End Sub で色の付いたセルの値をクリアしたいのですが、結合したセルからは値を消せない的なメッセージが出るのですが、結合しているセルに入っている値を消すにはどのようにすればよいかどなたか教えていただけませんでしょうか? セルが結合されているかどうか調べて、結合していたら解除すれば? >>288 C.MergeArea(1).ClearContents 神エクセルへの反逆は許されない 事務員さんに信仰を捧げよ はじめまして 最近vbaでマクロ書くようになりました Dim lastcol Dim kokyaku lastcol = Cells(2, Columns.Count).End(xlToLeft).Column Set kokyaku = Range(Cells(2, 4), Cells(2, lastcol)).Find(顧客コード).Column 上記はマクロの一部分なのですがこれのColumnでオブジェクトが必要ですというエラーでるのですがどうしたらいいでしょうか。 ちなみにSetをとるとオブジェクト変数およびwithブロックが、、というエラーが代わりにでてきてしまいます。 >>293 これならエラーが出ないと思うけど Set kokyaku = Range(Cells(2, 4), Cells(2, lastcol)) 列番号を取得したいだけならSetはいらない 顧客コードは変数なの? 変数じゃなく「顧客コード」という文字列を検索したいなら .Find(顧客コード) ではなく .Find("顧客コード") と書かないと 関係無いとも思うけど、顧客コードを検索して見つからなかったらエラー出るぞ。 まずFindまでをオブジェクトに代入し、代入されたオブジェクトがNothingかどうかをチェックすべき。 あーなんだ もうSubとFunctionの話は終わっちゃったのか ちょっと来るのが遅かったな >>294 列番号ほしくてColumn付けてたんですよねー でもSetなくしたらとりあえず実行できました・・・なんでできるようになったのか謎です >>295 顧客コードは変数です ユーザーフォームで入力させてそれを判別してるような形をとっています >>300 初めて1週間ですみませんorz 型式って指定したほうがやっぱりいいんですか・・ もう1つ悩んでることあるのでちょっと書かせてください ユーザーフォームで顧客コードを検索してそれを別ブックに転記したいんですけどうまくいきません 繰り返し文だと i=0 To 5 みたいに回数を決めないと思いまして、代わりにdo until使ってるんですけどバグっちゃって・・ 参考にコードと表のSS貼っておきます ご教授願います ttps://gyazo.com/08befaf20d8d06c1c09571710d6614b6 ttp://textuploader.com/dp3p2 確かウィンドウをサブクラス化し てコールバック関数でゴニョゴニョ、、、 なんたらする時メモリーの番地が、あーたらで それでふんくちおnを使うんだったような??。 今はこんなことしないのかな。 Dim i i = 0 Dim kekka Do Until kekka = vbCancel この辺が意味不明です。 i=0 だと定数みたいになってる。 kekkaも値自体が入ってないのに、do until kekka =2と書かれても。 (vbcancelは組込定数なので、2という数値と同じ) 型は指定した方がいいと思います。 >>305 単純に変数宣言したかっただけです;; 意味合いとしては、 「処理を続行しますか?」→OKだったら最初のユーザーフォームを起動させて転記する。 →Cancelだったら転記をしてプログラムを終了。 という感じなのですが。。 プロパティとメソッドの違いがわかりません 判別する方法とかあるんでしょうか >>307 一度新幹線に跳ねられてみればわかるかもよ >>307 判別して何がしたいの。 VBAなら深く意識しなくて困る事がないんだけど。 Propertyとあるのがプロパティ そうじゃないのがメソッドだ >>307 シンタックスシュガーというやつだよ 違いはあるともないともどっちともいえる >>303 クオーテーションマークでコメントアウトが出来ますので、どこでどのような処理をしたいのか書いておくと良いかもしれません。 >ユーザーフォームで顧客コードを検索して UserForm.Valueで入力された値を参照してから該当の表内に検索をかけることになるでしょう。 >Do Until 文 Do Loop文の中でIf kekka = vbOK Thenがコメントアウトになってますのでこれは機能しません。 また、Loopを記述するより先にEnd ifで完結させないとエラーが出るはずです。 書き慣れるまでは変数宣言は上部にまとめておくのも一つの手かと思います。 サーバーに入ってきた仕事の素材を連番のフォルダを手動で管理しております 現在画像のような感じにサーバーに素材が入ったのを確認したらとなりのセルを塗りつぶすというのを手動で管理しています それを特定のフォルダをexcelで監視させて新しいフォルダが入ったらとなりのセルを 自動で塗りつぶす、ということをvbaではできないでしょうか 可能であればコードも教えていただければ幸いです 画像url↓ https://dotup.org/uploda/dotup.org1560186.jpg https://dotup.org/uploda/dotup.org1560191.jpg この程度でもお金が発生するんだから知識の安売りしちゃダメだよね 日本企業は外注には何十万、何百万も払うのに自社の社員が書いたものはタダだと考えてる。 >>317 本題からはそれるけど、セルを塗りつぶすってのはセルの背景色を直接指定するんじゃなくて 条件付き書式にした方がいいと思うよ。 つまり該当セルに「1」とかの値を入力すると勝手に赤い背景色になるようにしとく。 値ならあとで利用しやすいからね。 >>324 VBAスレで吠えるトンスルランドの寄生虫WW >>323 そしてセル数のぶんだけ重くなる。 規模によるけどね。 色付けても検索とか抽出とか面倒なだけだから自分なら記号でも埋めるかな。 色付けるとすれば視認性をあげるためのオマケ。 わかったつもりになってUIを根底から否定してしまったプロさんw >>317 開始時刻から終了時刻まで一定間隔でマクロを実行するには? http://www.max.hi-ho.ne.jp/happy/YNxv9c134.html を使って >>321 のDir関数を使って指定のフォルダをチェック みたいな感じで >>317 こんな馬鹿に管理させる馬鹿会社があるのか アマチュア事務員VBAerしかいない中小企業なんてこんなもんでしょう ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.4.6 2024/03/23 Walang Kapalit ★ | Donguri System Team 5ちゃんねる