Excel VBA 質問スレ Part52
■ このスレッドは過去ログ倉庫に格納されています
スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※関連スレ VBAなんでも質問スレ Part2 http://mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 http://mevius.2ch.net/test/read.cgi/tech/1328536426/ ※前スレ Excel VBA 質問スレ Part51 http://mevius.2ch.net/test/read.cgi/tech/1510107990/ >>291 なるほど。 VBSはドラッグ&ドロップが使いやすいが終息方向。 VBAは開発しやすいがあくまでオフィスの製品ありき。 pythonは流行ってるが会社のマシンにデフォで入ってない。 導入のしやすさ、汎用性からpowershell かなあ。ただ動作が遅いのが気になるけど アレを使っちゃう派 誤取得する場合があるって聞くけどまだ未経験 『棚卸数の入力作業vba』(Masayo) エクセル Excel [エクセルの学校] www.excel.studio-kazu.jp こちらのサイトを参考に http://www.excel.studio-kazu.jp/kw/20111019173742.html VBAのマクロをボタン登録で エクセルのbook 内のsheet2セルからsheet1に書き込む事は出来るのですが、 powershell?が何なのか知りませんがそれで可能ならそれでも良いです。 ボタンを押すとインポートファイルを指定できる物でも良いのですが、 ただ、PhpMyAdminからの操作が素人には難しくてめんどうなので、 ログファイルをドラッグドロップでアップデートかボタン1つでやれないかと思います。 VBSや.hta(html application)でMySQLにアクセスする方法とかでも良いです。 ログファイル名とフォルダが固定ならスケジュール自動化も視野にしたいです。 よろしくお願いいたします。 >>300 ODBCを使うんですか?ありがとうございます。 具体的な使い方がわからないので、ご提示のサイトで勉強したいと思います。 >ySQLコマンドラインツール マウスかタッチパネル操作のみのおじいちゃんでも出来ますか? >>300 ご紹介頂いたページを見てみました。 誠に申し訳ないのですが ログのcsvファイルを新規でMySQLのテーブルに入れたい訳ではなく、 ExcelにMySQLからデータをダウンロードしたいのでも有りません。 確かにsheet1にMySQLからのダウンロードは可能です、sheet2にcsvのファイルも準備できます。 そして、先のVBAを用いてsheet2からsheet1の書き換えと消し込みが出来ましたが、 sheet1の書き換え後のデータをMySQLに戻すには 一旦csvで保存して、MySQLのテーブルをdrop かtruncate してから 書き換え保存したcsvをMySQLにインポートするしか無いのでしょうか? >>297 ケースバイケース 空白もカウントしたいかどうかで方法を変える >>297 ケースバイケース 特に他人が作った表にマクロ仕込むときはそう エクセルスキルがない奴が作るデータは表の配置が本当に酷いから、目で確認しないと意図した通りのセルにアクセスできないことが多い 先生、どうかご指導お願いします。 得意先名が記載してある列に対して 営業所や支店を削除して整理したいと考えてます 下記はAAA梶Z〇営業所という社名、営業署名を AAA鰍ニ置き換えようとして作成しているマクロです 下記のようにワイルドカードを使って置き換えようとすると スルーされてしまって変換できません どうしたらスルーせずに変換できるようになるでしょうか? Dim Mrow, TOcol, i, t As Long Dim Mrange As Range Mrow = Cells(Rows.Count, 1).End(xlUp).Row TOcol = Rows(1).Find(what:="得意先", lookat:=xlWhole).Column Range(Cells(2, TOcol), Cells(Mrow, TOcol)).Select For Each Mrange In Selection Mrange.Value = Replace(Mrange.Value, "AAA*", "AAA") Next Mrange Replaceにワイルドカードに対応した機能なんてあったっけ? >>305 素直に置換窓でしたら? って愚問かしら >>305 Mrange.Value = Split(Mrange.Value, "")(0) & "" これマクロでやる必要あるのかな、関数でやる方が早くて楽だと思うけど。 どうもありがとうございました! 関数使ってしまうと私しか操作ができないので CSVで読み込んだらボタン一つで誰でも結果が出せるようにしたかったのです^^ どもありがとうございました! この程度の動作でわざわざマクロ組んでボタン付けるのって無駄な気がするけど。 実際は複雑な条件分岐でもあるのかな。 大量にcsvがあるなら、一人で一括処理した方が早いし。 複数人で手分けするにしてもこれアドインで配るのか。 イマイチ作業がピンとこないな。 業務アプリからCSV吐き出してExcelでインポートする定型業務なんだろ >>305 Mrange.Replace what:="AAA*", replacement:="AAA" >>316 そういう感じか。 自分なら作業フォルダ決めて、そこに突っ込んだファイルでループ回して一括処理するな。 配布するならVBSでドロップしたら処理するようにしとく。 とりあえずボタンなどつけず、不可視でやった方が効率いいと思うな。 終わった問題にくどくど文句言ってんじゃねえよバカw あるURLからsendkeysでctrl+a ,ctrl +cで全画面をコピーし、セルに貼り付けたいのですが、macなのでIEが使えず、困っています。 どなたかわかる方いらっしゃいますか?? 社内で使ってるソフトがVB6で動いてるんだけど、見直すことになって中身見てるんだけど変数宣言してなかったり変数名なのかコントロールなのか分からんしGOtoで飛びまくってあっちゃこっちゃ移動して見辛いのをキレイに直す近道は何かね? >>321 一度に一つのポイントに絞って直していくといいよ。 たとえば、コントロール名の命名規則を全体的に統一、 動作確認、変数宣言強制、動作確認、 GoToを排除(関数切り出しやループ構文)、動作確認、 で、機能・動作は同じままで中身が綺麗になったら C#やらPythonやらに移植するのもいいかもね。 >>324 やっぱそういうかんじですよね。ゆくゆくC♯にはするつもりです。 >>328 ″¥工(任意の文字列).(任意の文字列)″ って感じ? >>321 goto文を切り離して呼び出して使おう ExcelVBAパスワード解析(解除)が出来ないプロテクトをかける方法がないかな。 ※解除出来るVBAが出回ってる、、、。 ソースを見せろと上司から言われて困っています、、、。 業務として作ったものであれば上司の指示に従うべきかと >>325 その質問をここにするような馬鹿頭じゃ無理なんじゃ? >>332 改善したことがすべて上司のおかげになってる。 上司のことを神様の存在?かな、、、。 わかりました。 ありがとうございました。 クソ会社を辞めてくる。 >>321 まずは全てのコードの先頭にOption Explicitを入れて変数宣言をきちんとするところからかな 初心者って必ず>>336 言うよなw 誰に騙されとんのお前ら?w 変数宣言をし忘れることはなくてもtypoのリスクはなくならないからな。 Visual Studioにコピペして修正すると捗る typoとかもチェックしてくれるし typoってそこまで問題になるかな。 マクロを大きな塊で作るとか、途中でテストしないとかじゃないと問題になるような発生の仕方しないと思うんだけど。 変数名ミスあるある 使ったことない関数と偶然同じ名前 よく似た変数をいくつも宣言してて、間違えたのにエラーにならない 逆に関数名をタイプミスして変数と解釈される >>341 大して問題にはならないと思うけど、多少は時間を浪費してしまうんじゃないか? >>331 業務で作成したソースコードを隠すとか何考えてるの??? お昼休みや定時後サービス残業やプライベート潰して土日に頑張って作ったマクロだから他人に無償で差し出せと言われたら躊躇なく消し去る >>345 じゃあ最初から作ったとか言わずに誰にもバレないようにこっそり使っとけ 頭のおかしな部下を持つ上司に同情するわ VBAというプログラミング言語は、昔からある枯れた技術だけど エクセルを使っていない職場は、無いと言えるぐらい普及しているから 業務のAI化の流れから需要が減る可能性は少ないだろうなあ >>348 エクセルよりお前の需要の心配しろよ能天気さんw パソコンによって紙が減るって言われていたのに印刷物が増えたように、 AI化するとカバー出来る業務が増えた結果、逆に忙しくなりそう。 パソコンによって誰でも気軽に印刷物を作成できるようになった だから紙の書類は増えたんだけど それ以上に母数となる書類は増えてるんだよ 印刷されてない電子書類の数も含めたら、やっぱり紙の書類の割合は減ってる Excel2013 デザインモードってONでもOFFでもどこが変わったのかわからないんだけど、 何が違うんですか? 検索したら、OFFの時はオブジェクトを右クリックしてもコード編集ができないとか書いてあって、 そんなことないんだけど! >>355 いいか、よく聞けよ 世の中には2種類のオブジェクトがあるんだ フォームコントロールと、ActiveXコントロールだ >>356 知ってる。ActiveXコントロールの方は一切使わないんだよね。 UserFormのオプションボタンが2つ(AとB)あったとします。 あるFrameのvisibleをFalseにしておいて、Bが選択された時だけTrueにしたいのですが、 @Bを選択→Frameが表示される AAを選択 BBの選択は解除されるが、Frameが表示されたまま になってしまいました。 Bの選択が解除されるのを認識させるにはどうしたらよいでしょうか? Bが選択された時だけTrueにしたのなら つぎは Aが選択された時にバルスにしたらいいんじゃないかい? >>359 ありがとうございます。 ボタンは今後増やす予定で、 たとえば、ボタンCを追加した場合は、 A_Clickと同様にC_ClickにもBのバルスを追加する必要がありますよね。 ボタンを追加する度に同じ処理を入れるのはイマイチかと思いましたが、 このぐらいの1行で済む処理なら問題なしおですかね。 >>275 やめろー 言うんじゃない、言うなー 作らせておいてちょっとミスると「こんなんだったら手作業でも一緒だよね」とかぬかしやがって。 朝まで電卓叩いて俺徹夜しましたオレ頑張ってますアピールしてろハゲ Option Explicit Private Sub OptionButton1_Change() Frame1.Visible = OptionButton1 End Sub Private Sub UserForm_Initialize() Frame1.Visible = OptionButton1 End Sub >>360 お、悪くない着眼点だねー。 都度分岐を増やすと手の入ったところは全て再テストし直しになるし その分岐がいろんなところに発生したら結構大変だよね。 いくつか方法があるよ。 例えば処理名とTRUE、FALSEの状態をシートに記載しておいて 処理に該当する状態を取得して設定する方法。 そういうことの出来る関数を一つ作っておいて 後は処理名を引数にでも渡して状態を取得するようにすれば都度分岐が増えることは無い。 他にもボタンが増えるということは 何かしら新しい処理が増えると言うことだから 新しく増えた側の処理に状態を持たせたりとか。 まぁ、その辺のことは前にも同じようなレスがあったと思ったけど そういうのを組み入れるのと長期的に見てそこまでのものでは無いんじゃ、と言うのが 組み入れるかどうかの判断基準になるんじゃないかな。 >>364 ありがとうございます。 プログラムを考えるのが面白くなってきました。 データのある最終行を取得したいのですが、 うまくうごきません。 Range("A10", Cells(Rows.Count, 1)).End(xlUp).Select A10から下に続く最後の行数(データ個数15個、空白なし)を取得したいのですが、 なぜか返ってくる数は24ではなく、 1048575です。 知識が浅く、解決できません。 どなたかご助言お願いします。 Range("A10").End(xlDown).Select >>368 余計なものがあったんですね。 ありがとうございます。 少し進みました。 シート1〜10まであって、a+b=cって計算を、シート1〜7で行ってます aとbは入力シートに入力した数値で、各シートが、個別に入力シートから引っ張ってきています 各シートで同じ変数を元に同じ計算をしてるが作り方って変ですかね? なんでそんなことしてるの?というと、検討するシートを1つ作って、そのあと別検討シートを追加、という作り方をしていった結果、検討内容自体は違うものの、共通の計算があるっていう状態になっていて、特に意識したわけではないです このエクセルを整理することを考えた時、共通の計算は、別個シートを作って、そこで計算させておくべきでしょうか?? UserFormの部品の位置を微調整するために、 ズーム表示させる方法はありませんか? (今は、Windows標準の拡大鏡を使ったりしています) スペースがあるかないかもわからん馬鹿がなぜそんなことを気にするかね >>371 >>371 あっvbaスレに間違えて書き込んでしまいました すみませんvba使いません UserFormを作成中にF5押下でお試し実行ができますが、 普通にやるとモーダルになります。 F5押下でもモードレスで実行する方法ってありますか? >>376 UserFormのShowModalプロパティをFalseにする ここはレベル高ぇ。 でも、みんな、協力しているのはとても嬉しいです。 勉強になる。 ありがとうございます。 よろしくお願いします。年1のプレイヤーです。 商品コード(1000〜1000000)に対して、別シートにある原価を vlookupで検索し、商品コードの右セルに代入しようとしているのですが 1000番台はエラーにならず、200000台からエラーになってしまいます (1000番台の次は200000台にコードが飛びます) 「worksheetfunctionクラスのVlookupプロパティを取得できません」 なにが原因かわからなくてヘルプお願いします。 ================================================= For i = 2 To 最終行 原価 = 0 With Sheets("原価") 原価 = WorksheetFunction.VLookup(Cells(i, 商品コード列), .Range(.Cells(1, 1), .Cells(10, 1000)), 6, False) End With Next i IEやExcelを非アクティブのままバッチ処理してると、CPUやメモリをやたら消費するのはなんでだろ? AppActivateで対処はできてるけど、理由が分からないのが気持ち悪い (ちなみにAppActivateは自アプリを前面にできないのはなんでだろ?いちいち別のVBSを呼び出してる) Excelが「遅くなる」点については調べてる人がいて、「非アクティブでは遠慮して動くから」と CPUが櫛型に動いてる様子を紹介してた ならCPU使用率が下がるはずなのに現実は逆で、やたら使用率が上がり、メモリも何倍も上がる 遅い分イベントが貯まってスタックが貯まってメモリが上がって、そのためにCPUも上がるのかな 「遠慮する」機構が裏目に出てるのかな IE, Excel などのプロセスを終了していないとか? ドンドン起動しても終了しないから、プロセスが無限に増えていってるとか? タスクマネージャーで見れば? >>387 1プロセスの話 それに、プロセスが貯まってる話ならなんでAppActivateで解決するのん? 例えば、コマンドプロンプトから、Ruby を起動して、そのソースコードから、 Selenium WebDriver で、ブラウザを起動すると、 これらは、GUI のプロセスだから、プロセスに親子関係がある。 (親) コマンドプロンプト → Ruby (子) → ブラウザ (孫) だから、親か子を終了すると、孫のブラウザも終了する でも、VBScript(VBS) などで、CUI モードを使うと、親子関係を断ち切るから、 (親) VBS → ブラウザ・Excel (子) VBS を終了しても、ブラウザ・Excel は終了されない。 子プロセスを、自分で管理せず、OS に任せている状態になる >>390 あ、分かった、俺が悪かった タスクスケジューラで直接エクセルを起動した場合は、この現象起きなかった気がする DOSのバッチ経由で起動すると起きる気がする で、「OSに任せる」と、非アクティブ時に無駄にCPUとメモリを食うと なるほど 留意点は分かったけど、理屈は分からんw プロセスには、2種類ある ユーザーが管理している、画面を持つ(GUI)プロセスと、 OS が管理している、画面を持たない(CUI)、 バックグラウンドで動作する、サーバーのようなプロセス 上は、プロセスに親子関係があるけど、 下は、OS がプロセスの親になるとか? フォルダ内の複数のエクセルファイルを開いて指定シートをコピーして閉じるを繰り返したい。コピーするシートは各エクセルに対して1シートのみ。 シート名は個人名でそれぞれバラバラなんだけどいい方法ない? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる