X



Excel VBA 質問スレ Part52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T
スレ立ての際は一行目に
!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/
0296デフォルトの名無しさん
垢版 |
2018/03/06(火) 07:49:34.86ID:RSFFAx7v
>>291
なるほど。
VBSはドラッグ&ドロップが使いやすいが終息方向。
VBAは開発しやすいがあくまでオフィスの製品ありき。
pythonは流行ってるが会社のマシンにデフォで入ってない。

導入のしやすさ、汎用性からpowershell かなあ。ただ動作が遅いのが気になるけど
0299295
垢版 |
2018/03/06(火) 08:26:39.35ID:qLV0sr+i
『棚卸数の入力作業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にアクセスする方法とかでも良いです。

ログファイル名とフォルダが固定ならスケジュール自動化も視野にしたいです。

よろしくお願いいたします。
0301295
垢版 |
2018/03/06(火) 08:50:29.68ID:qLV0sr+i
>>300
ODBCを使うんですか?ありがとうございます。
具体的な使い方がわからないので、ご提示のサイトで勉強したいと思います。

>ySQLコマンドラインツール
マウスかタッチパネル操作のみのおじいちゃんでも出来ますか?
0302295
垢版 |
2018/03/06(火) 10:37:26.93ID:qLV0sr+i
>>300
ご紹介頂いたページを見てみました。
誠に申し訳ないのですが
ログのcsvファイルを新規でMySQLのテーブルに入れたい訳ではなく、
ExcelにMySQLからデータをダウンロードしたいのでも有りません。
確かにsheet1にMySQLからのダウンロードは可能です、sheet2にcsvのファイルも準備できます。
そして、先のVBAを用いてsheet2からsheet1の書き換えと消し込みが出来ましたが、

sheet1の書き換え後のデータをMySQLに戻すには
一旦csvで保存して、MySQLのテーブルをdrop かtruncate してから
書き換え保存したcsvをMySQLにインポートするしか無いのでしょうか?
0304デフォルトの名無しさん
垢版 |
2018/03/06(火) 12:48:25.53ID:Z8jG7st4
>>297
ケースバイケース
特に他人が作った表にマクロ仕込むときはそう
エクセルスキルがない奴が作るデータは表の配置が本当に酷いから、目で確認しないと意図した通りのセルにアクセスできないことが多い
0305デフォルトの名無しさん
垢版 |
2018/03/06(火) 15:34:28.04ID:907OdX1W
先生、どうかご指導お願いします。
得意先名が記載してある列に対して
営業所や支店を削除して整理したいと考えてます

下記は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
0312デフォルトの名無しさん
垢版 |
2018/03/06(火) 19:04:37.73ID:907OdX1W
どうもありがとうございました!

関数使ってしまうと私しか操作ができないので
CSVで読み込んだらボタン一つで誰でも結果が出せるようにしたかったのです^^
どもありがとうございました!
0314デフォルトの名無しさん
垢版 |
2018/03/07(水) 07:52:35.02ID:dk6C+v+n
この程度の動作でわざわざマクロ組んでボタン付けるのって無駄な気がするけど。
実際は複雑な条件分岐でもあるのかな。
大量にcsvがあるなら、一人で一括処理した方が早いし。
複数人で手分けするにしてもこれアドインで配るのか。
イマイチ作業がピンとこないな。
0315デフォルトの名無しさん
垢版 |
2018/03/07(水) 07:57:02.27ID:g1VMydGw
頭が悪いだけだから気にすんな
0316デフォルトの名無しさん
垢版 |
2018/03/07(水) 08:25:40.94
業務アプリからCSV吐き出してExcelでインポートする定型業務なんだろ
0318デフォルトの名無しさん
垢版 |
2018/03/07(水) 18:33:39.24ID:jNQbCOPg
>>316
そういう感じか。
自分なら作業フォルダ決めて、そこに突っ込んだファイルでループ回して一括処理するな。
配布するならVBSでドロップしたら処理するようにしとく。
とりあえずボタンなどつけず、不可視でやった方が効率いいと思うな。
0319デフォルトの名無しさん
垢版 |
2018/03/07(水) 20:37:03.79ID:fiBk/l1y
終わった問題にくどくど文句言ってんじゃねえよバカw
0320デフォルトの名無しさん
垢版 |
2018/03/09(金) 05:37:29.78ID:Ioc33b8P
あるURLからsendkeysでctrl+a ,ctrl +cで全画面をコピーし、セルに貼り付けたいのですが、macなのでIEが使えず、困っています。
どなたかわかる方いらっしゃいますか??
0321デフォルトの名無しさん
垢版 |
2018/03/09(金) 07:17:33.28ID:iKQibMl2
社内で使ってるソフトがVB6で動いてるんだけど、見直すことになって中身見てるんだけど変数宣言してなかったり変数名なのかコントロールなのか分からんしGOtoで飛びまくってあっちゃこっちゃ移動して見辛いのをキレイに直す近道は何かね?
0324デフォルトの名無しさん
垢版 |
2018/03/09(金) 08:21:10.99
>>321
一度に一つのポイントに絞って直していくといいよ。
たとえば、コントロール名の命名規則を全体的に統一、
動作確認、変数宣言強制、動作確認、
GoToを排除(関数切り出しやループ構文)、動作確認、
で、機能・動作は同じままで中身が綺麗になったら
C#やらPythonやらに移植するのもいいかもね。
0331デフォルトの名無しさん
垢版 |
2018/03/09(金) 13:21:58.26ID:8uMVsz+u
ExcelVBAパスワード解析(解除)が出来ないプロテクトをかける方法がないかな。
※解除出来るVBAが出回ってる、、、。

ソースを見せろと上司から言われて困っています、、、。
0334デフォルトの名無しさん
垢版 |
2018/03/09(金) 17:46:42.77ID:wpod4SXa
>>332
改善したことがすべて上司のおかげになってる。
上司のことを神様の存在?かな、、、。
わかりました。
ありがとうございました。
クソ会社を辞めてくる。
0337デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:01:08.54ID:M2r/B6Zk
初心者って必ず>>336言うよなw
誰に騙されとんのお前ら?w
0341デフォルトの名無しさん
垢版 |
2018/03/09(金) 21:09:01.46ID:BWrGum71
typoってそこまで問題になるかな。
マクロを大きな塊で作るとか、途中でテストしないとかじゃないと問題になるような発生の仕方しないと思うんだけど。
0342デフォルトの名無しさん
垢版 |
2018/03/09(金) 21:27:32.88ID:Y3Dk8KBt
変数名ミスあるある

使ったことない関数と偶然同じ名前
よく似た変数をいくつも宣言してて、間違えたのにエラーにならない
逆に関数名をタイプミスして変数と解釈される
0344デフォルトの名無しさん
垢版 |
2018/03/09(金) 22:09:00.28
>>331
業務で作成したソースコードを隠すとか何考えてるの???
0345デフォルトの名無しさん
垢版 |
2018/03/09(金) 23:06:24.40ID:s0Ox43/Q
お昼休みや定時後サービス残業やプライベート潰して土日に頑張って作ったマクロだから他人に無償で差し出せと言われたら躊躇なく消し去る
0346デフォルトの名無しさん
垢版 |
2018/03/09(金) 23:10:16.18
>>345
じゃあ最初から作ったとか言わずに誰にもバレないようにこっそり使っとけ

頭のおかしな部下を持つ上司に同情するわ
0348デフォルトの名無しさん
垢版 |
2018/03/09(金) 23:48:40.84ID:jpL8SCkU
VBAというプログラミング言語は、昔からある枯れた技術だけど
エクセルを使っていない職場は、無いと言えるぐらい普及しているから
業務のAI化の流れから需要が減る可能性は少ないだろうなあ
0349デフォルトの名無しさん
垢版 |
2018/03/10(土) 00:01:14.03ID:4nlfLUix
>>348
エクセルよりお前の需要の心配しろよ能天気さんw
0350デフォルトの名無しさん
垢版 |
2018/03/10(土) 00:38:30.02ID:PZ/jlzJE
パソコンによって紙が減るって言われていたのに印刷物が増えたように、
AI化するとカバー出来る業務が増えた結果、逆に忙しくなりそう。
0352デフォルトの名無しさん
垢版 |
2018/03/10(土) 09:24:51.95ID:AY0LzIsz
パソコンによって誰でも気軽に印刷物を作成できるようになった
だから紙の書類は増えたんだけど
それ以上に母数となる書類は増えてるんだよ
印刷されてない電子書類の数も含めたら、やっぱり紙の書類の割合は減ってる
0353デフォルトの名無しさん
垢版 |
2018/03/10(土) 10:46:17.42ID:xR2Zob7T
割合なんかはじめから問題になってないってゆう
0355デフォルトの名無しさん
垢版 |
2018/03/10(土) 21:17:23.13ID:27Zew0ET
Excel2013

デザインモードってONでもOFFでもどこが変わったのかわからないんだけど、
何が違うんですか?
検索したら、OFFの時はオブジェクトを右クリックしてもコード編集ができないとか書いてあって、
そんなことないんだけど!
0356デフォルトの名無しさん
垢版 |
2018/03/10(土) 21:32:40.22ID:/UsVOqQZ
>>355
いいか、よく聞けよ
世の中には2種類のオブジェクトがあるんだ
フォームコントロールと、ActiveXコントロールだ
0358デフォルトの名無しさん
垢版 |
2018/03/11(日) 09:02:12.87ID:eeeFjAQk
UserFormのオプションボタンが2つ(AとB)あったとします。
あるFrameのvisibleをFalseにしておいて、Bが選択された時だけTrueにしたいのですが、
@Bを選択→Frameが表示される
AAを選択
BBの選択は解除されるが、Frameが表示されたまま
になってしまいました。

Bの選択が解除されるのを認識させるにはどうしたらよいでしょうか?
0359デフォルトの名無しさん
垢版 |
2018/03/11(日) 09:10:40.94ID:WgDqrFTJ
Bが選択された時だけTrueにしたのなら
つぎは
Aが選択された時にバルスにしたらいいんじゃないかい?
0360デフォルトの名無しさん
垢版 |
2018/03/11(日) 09:36:36.42ID:eeeFjAQk
>>359
ありがとうございます。

ボタンは今後増やす予定で、
たとえば、ボタンCを追加した場合は、
A_Clickと同様にC_ClickにもBのバルスを追加する必要がありますよね。
ボタンを追加する度に同じ処理を入れるのはイマイチかと思いましたが、
このぐらいの1行で済む処理なら問題なしおですかね。
0361デフォルトの名無しさん
垢版 |
2018/03/11(日) 11:12:45.26ID:1qbV0tMy
>>275
やめろー
言うんじゃない、言うなー
作らせておいてちょっとミスると「こんなんだったら手作業でも一緒だよね」とかぬかしやがって。
朝まで電卓叩いて俺徹夜しましたオレ頑張ってますアピールしてろハゲ
0363デフォルトの名無しさん
垢版 |
2018/03/11(日) 13:16:00.78
Option Explicit

Private Sub OptionButton1_Change()
Frame1.Visible = OptionButton1
End Sub

Private Sub UserForm_Initialize()
Frame1.Visible = OptionButton1
End Sub
0364デフォルトの名無しさん
垢版 |
2018/03/11(日) 18:26:53.04ID:rR985EAX
>>360
お、悪くない着眼点だねー。
都度分岐を増やすと手の入ったところは全て再テストし直しになるし
その分岐がいろんなところに発生したら結構大変だよね。

いくつか方法があるよ。

例えば処理名とTRUE、FALSEの状態をシートに記載しておいて
処理に該当する状態を取得して設定する方法。
そういうことの出来る関数を一つ作っておいて
後は処理名を引数にでも渡して状態を取得するようにすれば都度分岐が増えることは無い。

他にもボタンが増えるということは
何かしら新しい処理が増えると言うことだから
新しく増えた側の処理に状態を持たせたりとか。

まぁ、その辺のことは前にも同じようなレスがあったと思ったけど
そういうのを組み入れるのと長期的に見てそこまでのものでは無いんじゃ、と言うのが
組み入れるかどうかの判断基準になるんじゃないかな。
0365デフォルトの名無しさん
垢版 |
2018/03/11(日) 20:18:26.70ID:lvju0XX+
長いねん
0367デフォルトの名無しさん
垢版 |
2018/03/11(日) 23:24:33.00ID:iweXkOC/
データのある最終行を取得したいのですが、
うまくうごきません。

Range("A10", Cells(Rows.Count, 1)).End(xlUp).Select

A10から下に続く最後の行数(データ個数15個、空白なし)を取得したいのですが、
なぜか返ってくる数は24ではなく、
1048575です。

知識が浅く、解決できません。
どなたかご助言お願いします。
0369デフォルトの名無しさん
垢版 |
2018/03/11(日) 23:47:11.35ID:iweXkOC/
>>368
余計なものがあったんですね。
ありがとうございます。
少し進みました。
0370デフォルトの名無しさん
垢版 |
2018/03/12(月) 00:02:45.31ID:HsTapSs6
シート1〜10まであって、a+b=cって計算を、シート1〜7で行ってます
aとbは入力シートに入力した数値で、各シートが、個別に入力シートから引っ張ってきています

各シートで同じ変数を元に同じ計算をしてるが作り方って変ですかね?
なんでそんなことしてるの?というと、検討するシートを1つ作って、そのあと別検討シートを追加、という作り方をしていった結果、検討内容自体は違うものの、共通の計算があるっていう状態になっていて、特に意識したわけではないです
このエクセルを整理することを考えた時、共通の計算は、別個シートを作って、そこで計算させておくべきでしょうか??
0371デフォルトの名無しさん
垢版 |
2018/03/12(月) 05:43:32.66
シートが必須なの?
標準モジュールじゃあかんの?
0372デフォルトの名無しさん
垢版 |
2018/03/12(月) 12:42:37.39ID:cBxGAu9U
UserFormの部品の位置を微調整するために、
ズーム表示させる方法はありませんか?
(今は、Windows標準の拡大鏡を使ったりしています)
0375デフォルトの名無しさん
垢版 |
2018/03/12(月) 18:40:09.24ID:BreNV4lT
>>371
>>371
あっvbaスレに間違えて書き込んでしまいました
すみませんvba使いません
0376デフォルトの名無しさん
垢版 |
2018/03/13(火) 00:27:26.72ID:qWMLlpqF
UserFormを作成中にF5押下でお試し実行ができますが、
普通にやるとモーダルになります。
F5押下でもモードレスで実行する方法ってありますか?
0377デフォルトの名無しさん
垢版 |
2018/03/13(火) 01:15:13.77
>>376
UserFormのShowModalプロパティをFalseにする
0380デフォルトの名無しさん
垢版 |
2018/03/13(火) 11:51:11.57ID:pjKAsbJg
ここはレベル高ぇ。
でも、みんな、協力しているのはとても嬉しいです。
勉強になる。
ありがとうございます。
0381デフォルトの名無しさん
垢版 |
2018/03/13(火) 17:49:20.30ID:Fj3wIRvx
よろしくお願いします。年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
0383381
垢版 |
2018/03/13(火) 18:11:15.85ID:Fj3wIRvx
すみません。解決しました。
0385デフォルトの名無しさん
垢版 |
2018/03/14(水) 20:38:23.29ID:LX5CWuB3
IEやExcelを非アクティブのままバッチ処理してると、CPUやメモリをやたら消費するのはなんでだろ?
AppActivateで対処はできてるけど、理由が分からないのが気持ち悪い
(ちなみにAppActivateは自アプリを前面にできないのはなんでだろ?いちいち別のVBSを呼び出してる)

Excelが「遅くなる」点については調べてる人がいて、「非アクティブでは遠慮して動くから」と
CPUが櫛型に動いてる様子を紹介してた

ならCPU使用率が下がるはずなのに現実は逆で、やたら使用率が上がり、メモリも何倍も上がる
遅い分イベントが貯まってスタックが貯まってメモリが上がって、そのためにCPUも上がるのかな
「遠慮する」機構が裏目に出てるのかな
0387デフォルトの名無しさん
垢版 |
2018/03/14(水) 21:38:17.91ID:QheYb9tS
IE, Excel などのプロセスを終了していないとか?
ドンドン起動しても終了しないから、プロセスが無限に増えていってるとか?

タスクマネージャーで見れば?
0388デフォルトの名無しさん
垢版 |
2018/03/14(水) 22:18:16.08ID:LX5CWuB3
>>387
1プロセスの話
それに、プロセスが貯まってる話ならなんでAppActivateで解決するのん?
0390387
垢版 |
2018/03/14(水) 23:58:49.45ID:QheYb9tS
例えば、コマンドプロンプトから、Ruby を起動して、そのソースコードから、
Selenium WebDriver で、ブラウザを起動すると、
これらは、GUI のプロセスだから、プロセスに親子関係がある。
(親) コマンドプロンプト → Ruby (子) → ブラウザ (孫)

だから、親か子を終了すると、孫のブラウザも終了する

でも、VBScript(VBS) などで、CUI モードを使うと、親子関係を断ち切るから、
(親) VBS → ブラウザ・Excel (子)

VBS を終了しても、ブラウザ・Excel は終了されない。
子プロセスを、自分で管理せず、OS に任せている状態になる
0392385
垢版 |
2018/03/15(木) 01:06:52.75ID:3pohbyhz
>>390
あ、分かった、俺が悪かった
タスクスケジューラで直接エクセルを起動した場合は、この現象起きなかった気がする
DOSのバッチ経由で起動すると起きる気がする
で、「OSに任せる」と、非アクティブ時に無駄にCPUとメモリを食うと
なるほど
留意点は分かったけど、理屈は分からんw
0393387
垢版 |
2018/03/15(木) 01:42:16.85ID:NnpmsWbw
プロセスには、2種類ある

ユーザーが管理している、画面を持つ(GUI)プロセスと、

OS が管理している、画面を持たない(CUI)、
バックグラウンドで動作する、サーバーのようなプロセス

上は、プロセスに親子関係があるけど、
下は、OS がプロセスの親になるとか?
0394デフォルトの名無しさん
垢版 |
2018/03/15(木) 06:34:45.23ID:z1/gBAj5
フォルダ内の複数のエクセルファイルを開いて指定シートをコピーして閉じるを繰り返したい。コピーするシートは各エクセルに対して1シートのみ。

シート名は個人名でそれぞれバラバラなんだけどいい方法ない?
■ このスレッドは過去ログ倉庫に格納されています

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