Excel VBA 質問スレ Part52

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
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/
251デフォルトの名無しさん
垢版 |
2018/03/02(金) 07:17:55.07
>>250
[表示]-[ウィンドウ]-[非表示]
2018/03/02(金) 08:53:24.56ID:NzNuwPhv
クラス継承前提で設計してしまったのだが、どうしてくれるの。
2018/03/02(金) 09:38:57.79ID:5NrcBP5g
お前がマヌケだったって事だろ。
作り直せ
254デフォルトの名無しさん
垢版 |
2018/03/02(金) 12:05:11.13
>>252
ポリモーフィズムはImplementsがあるから、あとはどうにでも工夫できるやろ
255デフォルトの名無しさん
垢版 |
2018/03/02(金) 19:00:30.03ID:ALTNLkg9
>>252
コピペは攻守ともに最強の継承やぞ
2018/03/02(金) 21:57:53.05ID:YGnqgkH5
スーパークラス作ってそれをオーバーライドしてけば省力化できると思ったのかな?
257デフォルトの名無しさん
垢版 |
2018/03/02(金) 22:07:46.54
省力化は委譲で代替できる
258デフォルトの名無しさん
垢版 |
2018/03/02(金) 22:19:05.00ID:ALTNLkg9
え?委譲で省力化を!?
2018/03/03(土) 08:40:25.03ID:xibgNHFN
正直VBAのクラスは他のObject指向言語に比べるとその辺見劣りするのは仕方ない。元々構造化言語だし。

そこをどうするかを考えて行くのが醍醐味でもあるんだけど
やっぱり移譲にも限界があって例えばフォームを継承してもっと機能を追加したり変更したりしたいとき、
.Net系であれば単純に継承してメソッドやプロパティを追加やオーバーライドすれば良いものが、
移譲の場合は全て呼出し口を設定しなければならなかったりするので
こういう場合は余り現実的とは言えない。

移譲や継承を使うのとはまた違った方法を考える必要があるんだけど
それを考えるのもまた醍醐味。
2018/03/03(土) 09:00:54.41ID:QwmpO0ZF
>醍醐味
プックスクス
2018/03/03(土) 09:05:29.61ID:CziLTh5W
他に現実的な解法が無いからVBA使っているだけで、誰も好んで使っているわけではないんだけど、
かといって自分の無能を全てVBAのせいにしている発言を見るとイラッとするのは確か
2018/03/03(土) 11:49:03.81ID:Rcnk03vE
>>260 ☆ミ DAIGOアジ ☆ミ
2018/03/03(土) 12:45:47.64ID:axcuG9mm
完全に割り切って ByVal As Object または ByVal As Variant で委譲オンリー
2018/03/03(土) 14:19:14.14ID:axcuG9mm
間違えた
ByVal As Object または ByRef As Variant
265デフォルトの名無しさん
垢版 |
2018/03/04(日) 00:55:22.93ID:DAVLACwj
それのどこが醍醐味なの?
2018/03/04(日) 09:54:22.41ID:K2njBMWG
エクセルのマクロちょいちょいと組み立てて自動化させたら

ズルをするな、計算機でちゃんと計算して打ち込め

って怒られた


意味わかんねー
2018/03/04(日) 09:58:17.84ID:3XS25AQI
計算機
2018/03/04(日) 10:02:50.11ID:aHerEJAV
パソコンが登場し始めた前世紀になら居ただろうけど、このご時世だと信じがたいわな
2018/03/04(日) 10:39:41.20ID:/M0AdgD3
その手の輩は

1.そんなもんを自動化したら
 工数がへるから残業する理由が
 なくなるだろ

2.人月商売なのに何で利益減らす行為するん

3.手作り、真心込めて、おもてなし


さて、どれ?
2018/03/04(日) 10:51:00.13ID:6PsP9d9s
単なるバカ
2018/03/04(日) 10:55:35.55ID:m9Z0+hmg
>計算機でちゃんと計算して打ち込め

いや〜、そこまで言うなら計算機なんて信じず算盤で計算しろ
が正しいでしょ w
2018/03/04(日) 11:30:31.21ID:7ZGw1DO5
今の時代でも、碌にパソコン使えないくせに、やたらパソコンで作業したがるおじさん・若手はいるし
ああいう人たちが「下手にパソコン使わせると遅くなる」ってイメージを植え付けているのかもしれない

あとマクロ組む工程までいれると、さして時間短縮になっていない人とか
273デフォルトの名無しさん
垢版 |
2018/03/04(日) 12:45:40.43ID:nY2/C6yI
自己満なんやからええやんけ
2018/03/04(日) 14:52:14.27ID:6GOtxg/5
内製にせよ外注するにせよ他人にマクロ作ってもらうとなると時間も経費もかかるし、改修も容易じゃないからな
多少時間かかってもマクロを自分で組めた方が楽なのは間違いないけどね
管理職のくせにマクロの効用を理解できないような奴が、マクロ実装にかかる時間だけを見て手間がかかるからやめろとか言ってくることが結構あるからな
275デフォルトの名無しさん
垢版 |
2018/03/04(日) 15:51:22.29ID:DAVLACwj
結構あるってことはみんなお前のマクロにはもう懲り懲りなんじゃないの?
2018/03/04(日) 15:59:46.94ID:ewEnZjbB
エクセルマクロだと正しいか間違ってるかの判断が(上司にとって)出来ない
上司が使えないプログラミング言語は禁止ねっていうのと同じ種類の問題だと思うよ
2018/03/04(日) 17:55:29.98ID:ibRKmML9
マクロは自分用だとすごく便利
他人が作りっぱなしにしたマクロをだましだまし使うのは地獄
2018/03/04(日) 18:24:28.65ID:jmE3cBn5
エラーハンドリング全然されず
Sheet の初期化(単なるクリア)も
人間がやらないとダメな仕様
のマクロに機能拡張しろってのが
あったけどとりあえず5分で
チンカスであることを強調した上でC#で作り直した思い出
279デフォルトの名無しさん
垢版 |
2018/03/04(日) 19:26:15.30
自分だけでこっそり使うんならいざしらず、
他人に使ってもらいたいんなら
使ってもらえるような作り方&ドキュメント整備しろってことだな
2018/03/04(日) 20:05:19.79ID:IczeIIEA
エクセルは説明書ページを簡単に添付できる(シート追加するだけ)のがいい
EXE形式だとreadme.txtやHELPなんて読んでもらえないしな
まぁ、エクセルで説明ページがあってもよまないやつがおおいから結局コメント機能使いまくりだったり
画面上に説明書いちゃうけど
2018/03/04(日) 20:22:52.23ID:DWVE2Vb5
もっぱらpowershellやvbscriptで書いてる
元のワークブック汚さずに済むし
2018/03/04(日) 22:51:58.52ID:a3KsBQsp
>>281
ちなみにどう使い分けしてる?
powershell 使い始めたんだけど思うような動作しなくて、結局vbsでいいやってなっちゃう。
2018/03/04(日) 22:53:07.28ID:a3KsBQsp
>>281
ちなみにどう使い分けしてる?
powershell 使い始めたんだけど思うような動作しなくて、結局vbsでいいやってなっちゃう。
2018/03/04(日) 23:02:24.00ID:XOwF/6X2
デバッグ中に別シートに集計中なのに
元データのシートを破壊してしまって涙目
アクティブシートのカレントリージョンをクリアで綺麗サッパリ(´Д`)
285デフォルトの名無しさん
垢版 |
2018/03/04(日) 23:41:13.27ID:DAVLACwj
マクロはおめえのオモチャじゃねえんだよ
これに懲りたらスッパリとマクロから足を洗うんだな
2018/03/05(月) 10:31:45.26ID:Bgh1BGUs
マクロは個人のオモチャでいいだろう
性能や信頼性は作り手による
287デフォルトの名無しさん
垢版 |
2018/03/05(月) 12:18:46.09ID:Qtnfm99f
>>286
何開き直っとんねんお前もマクロいじるの禁止な
2018/03/05(月) 13:06:15.33ID:RmFDDOch
糞マクロでもいいじゃない
だって人間だもの

げいつ
2018/03/05(月) 16:20:35.95ID:Bgh1BGUs
>>287
マクロは個人のものだと言っとるだろうが
他人に直接影響を及ぼさないんだから禁止もへったくれもない
290デフォルトの名無しさん
垢版 |
2018/03/05(月) 19:21:30.95ID:2ygytXOa
エクセルVBAのグラフの範囲指定Rows.Countで困っております。
お力添え頂きたくお願いしたいです。

A1からD600まで範囲指定して、K1からK600 までをVBAで範囲指定したいのですが、
なお601行目はすべて空白で、602行目には合計数が入っています。
600行目というのは日によって異なり入力値の最大数がばらばらです。

手動でやる際は A1をターゲットし、Shift →×4、CTRL+SHIFT+↓、
CTRLを押しながらK1をターゲットCTRL+SHIFT+↓で選択。

これをVBAに置き換えるために行ったのですが
某サイトで

Set Target = Union(Range(Range("A1"), Cells(Rows.Count, 4).End(xlUp)), _
Range(Range("K1"), Cells(Rows.Count, 11).End(xlUp)))

というような指定方法がありましたので行ってみましたが
合計数が入力されている602行目が範囲に含まれており困っております。

A1:D600(空白まで),K1:K600(空白まで) というように指定するにはどのようにすればよいでしょか。
2018/03/05(月) 19:32:56.50ID:AenKmQiD
>>282-283
>>281じゃないけど俺は新規作成はPowerShellに一本化した
まだちょっとはあ?ってなる挙動があるけどやりたいことはだいたいできてる
2018/03/05(月) 21:32:20.85ID:2t/pwmDg
>>290
Range("a1").CurrentRegion
Range("k1").CurrentRegion
でやってみよう
2018/03/05(月) 21:48:18.83ID:2t/pwmDg
>>290
言い忘れたけど
A〜DとKが表としてつながってない想定ね

一つの表からなら
Range(Range("a1"), Range("d1").End(xlDown))
Range(Range("k1"), Range("k1").End(xlDown))
でそれぞれの範囲をとれる
294デフォルトの名無しさん
垢版 |
2018/03/05(月) 22:25:16.54ID:2ygytXOa
>>293
ありがとうございます。
2つ目に書いていただいた表が一個の場合を想定しています。
Rangeで行う事が出来るのですね。
Cells(Rows.Count, 4).End(xlUp)をxlDwonに
変えてもダメだったのでかなり絶望してました。

A1〜A20とかに書かれている条件でそれが含まれていたら↓を検索するとかも
これでできそうな気がしてきました。
ありがとうございました。
295Excel→MySQL
垢版 |
2018/03/06(火) 01:06:36.39ID:fiBtEf92
すみません、あまり仕組みがよくわからず
こちらに質問致します。
やり方の案内でも助かります。

Excelかtxtのデータをシート上に配置したボタンワンクリックで
→MySQLにアップデートって出来ますか?

バーコードリーダー等のlogファイル
xls,csv,txt
―――A――――B
1、barcode 棚卸数
2、9876543, 21
3、1234567,89


MySQLデータベース
1、メーカ、型番、コード、品名、在庫数
2、Pansomy,THE123,9876543,USOメモリー,3
3、Hitasun,END987,1234567,モバテリー,7

在庫数を棚卸数で上書きが出来れば良いです。
よろしくお願いいたします。
2018/03/06(火) 07:49:34.86ID:RSFFAx7v
>>291
なるほど。
VBSはドラッグ&ドロップが使いやすいが終息方向。
VBAは開発しやすいがあくまでオフィスの製品ありき。
pythonは流行ってるが会社のマシンにデフォで入ってない。

導入のしやすさ、汎用性からpowershell かなあ。ただ動作が遅いのが気になるけど
2018/03/06(火) 08:23:29.61ID:Djyon39L
最終行取得する時って、おまえらどっち派?
2018/03/06(火) 08:25:04.77ID:2b8pbF8x
アレを使っちゃう派
誤取得する場合があるって聞くけどまだ未経験
299295
垢版 |
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にアクセスする方法とかでも良いです。

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

よろしくお願いいたします。
2018/03/06(火) 08:31:48.14ID:2b8pbF8x
>>295
ODBCの存在を知らないとかそういう話?
https://qiita.com/msano/items/fdcc0cbb8e41b988ce2d

もしくはySQLコマンドラインツールでもできると思う
301295
垢版 |
2018/03/06(火) 08:50:29.68ID:qLV0sr+i
>>300
ODBCを使うんですか?ありがとうございます。
具体的な使い方がわからないので、ご提示のサイトで勉強したいと思います。

>ySQLコマンドラインツール
マウスかタッチパネル操作のみのおじいちゃんでも出来ますか?
302295
垢版 |
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にインポートするしか無いのでしょうか?
2018/03/06(火) 10:58:38.66ID:o11Cbfr7
>>297
ケースバイケース
空白もカウントしたいかどうかで方法を変える
2018/03/06(火) 12:48:25.53ID:Z8jG7st4
>>297
ケースバイケース
特に他人が作った表にマクロ仕込むときはそう
エクセルスキルがない奴が作るデータは表の配置が本当に酷いから、目で確認しないと意図した通りのセルにアクセスできないことが多い
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
2018/03/06(火) 15:40:08.21ID:Kz9r/khc
Replaceにワイルドカードに対応した機能なんてあったっけ?
2018/03/06(火) 16:55:46.30ID:syG3HE1y
>>305
素直に置換窓でしたら?
って愚問かしら
2018/03/06(火) 17:00:18.43ID:o11Cbfr7
>>305
Mrange.Value = Split(Mrange.Value, "")(0) & ""
2018/03/06(火) 17:10:48.55ID:Kz9r/khc
>>308
楽したいときはそれよくやる
2018/03/06(火) 17:44:23.62ID:RSFFAx7v
これマクロでやる必要あるのかな、関数でやる方が早くて楽だと思うけど。
2018/03/06(火) 18:07:44.86ID:J8w9cnP2
ここで詳しく説明したくない何かがあるのさきっと
2018/03/06(火) 19:04:37.73ID:907OdX1W
どうもありがとうございました!

関数使ってしまうと私しか操作ができないので
CSVで読み込んだらボタン一つで誰でも結果が出せるようにしたかったのです^^
どもありがとうございました!
2018/03/07(水) 01:38:36.16ID:x26Og5c6
これInStrとLeft使えば済む話だろ
2018/03/07(水) 07:52:35.02ID:dk6C+v+n
この程度の動作でわざわざマクロ組んでボタン付けるのって無駄な気がするけど。
実際は複雑な条件分岐でもあるのかな。
大量にcsvがあるなら、一人で一括処理した方が早いし。
複数人で手分けするにしてもこれアドインで配るのか。
イマイチ作業がピンとこないな。
315デフォルトの名無しさん
垢版 |
2018/03/07(水) 07:57:02.27ID:g1VMydGw
頭が悪いだけだから気にすんな
316デフォルトの名無しさん
垢版 |
2018/03/07(水) 08:25:40.94
業務アプリからCSV吐き出してExcelでインポートする定型業務なんだろ
2018/03/07(水) 12:27:05.35ID:ITQ9LWXL
>>305
Mrange.Replace what:="AAA*", replacement:="AAA"
2018/03/07(水) 18:33:39.24ID:jNQbCOPg
>>316
そういう感じか。
自分なら作業フォルダ決めて、そこに突っ込んだファイルでループ回して一括処理するな。
配布するならVBSでドロップしたら処理するようにしとく。
とりあえずボタンなどつけず、不可視でやった方が効率いいと思うな。
319デフォルトの名無しさん
垢版 |
2018/03/07(水) 20:37:03.79ID:fiBk/l1y
終わった問題にくどくど文句言ってんじゃねえよバカw
2018/03/09(金) 05:37:29.78ID:Ioc33b8P
あるURLからsendkeysでctrl+a ,ctrl +cで全画面をコピーし、セルに貼り付けたいのですが、macなのでIEが使えず、困っています。
どなたかわかる方いらっしゃいますか??
2018/03/09(金) 07:17:33.28ID:iKQibMl2
社内で使ってるソフトがVB6で動いてるんだけど、見直すことになって中身見てるんだけど変数宣言してなかったり変数名なのかコントロールなのか分からんしGOtoで飛びまくってあっちゃこっちゃ移動して見辛いのをキレイに直す近道は何かね?
2018/03/09(金) 07:53:39.76ID:KC7p8RhA
全面作り直し
2018/03/09(金) 08:09:53.68ID:p11XwhXH
ついでにc#にでも書き換えたら
324デフォルトの名無しさん
垢版 |
2018/03/09(金) 08:21:10.99
>>321
一度に一つのポイントに絞って直していくといいよ。
たとえば、コントロール名の命名規則を全体的に統一、
動作確認、変数宣言強制、動作確認、
GoToを排除(関数切り出しやループ構文)、動作確認、
で、機能・動作は同じままで中身が綺麗になったら
C#やらPythonやらに移植するのもいいかもね。
2018/03/09(金) 10:05:38.77ID:iKQibMl2
>>324
やっぱそういうかんじですよね。ゆくゆくC♯にはするつもりです。
2018/03/09(金) 12:03:12.65ID:f4+dGRtD
普通放置するだろ
2018/03/09(金) 12:07:04.28ID:iKQibMl2
″¥工*.*″

これどういう意味?
2018/03/09(金) 12:10:16.16ID:49Hhyu8r
>>327
ワイルドカード 文字列
で、ググれ
2018/03/09(金) 12:43:24.23ID:iKQibMl2
>>328
″¥工(任意の文字列).(任意の文字列)″

って感じ?
2018/03/09(金) 12:54:06.72ID:D+ALvGrM
>>321
goto文を切り離して呼び出して使おう
2018/03/09(金) 13:21:58.26ID:8uMVsz+u
ExcelVBAパスワード解析(解除)が出来ないプロテクトをかける方法がないかな。
※解除出来るVBAが出回ってる、、、。

ソースを見せろと上司から言われて困っています、、、。
2018/03/09(金) 13:46:20.12ID:Bwgez1ze
業務として作ったものであれば上司の指示に従うべきかと
2018/03/09(金) 15:21:24.04ID:7ef4doJx
>>325
その質問をここにするような馬鹿頭じゃ無理なんじゃ?
2018/03/09(金) 17:46:42.77ID:wpod4SXa
>>332
改善したことがすべて上司のおかげになってる。
上司のことを神様の存在?かな、、、。
わかりました。
ありがとうございました。
クソ会社を辞めてくる。
2018/03/09(金) 17:56:22.24ID:f4+dGRtD
つまり食い物にされている、と?
2018/03/09(金) 17:58:04.10ID:CekgNpjO
>>321
まずは全てのコードの先頭にOption Explicitを入れて変数宣言をきちんとするところからかな
337デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:01:08.54ID:M2r/B6Zk
初心者って必ず>>336言うよなw
誰に騙されとんのお前ら?w
2018/03/09(金) 19:33:16.36ID:CekgNpjO
自称玄人 w
2018/03/09(金) 20:27:41.68ID:f4+dGRtD
変数宣言をし忘れることはなくてもtypoのリスクはなくならないからな。
2018/03/09(金) 20:50:54.71ID:qnoZKStj
Visual Studioにコピペして修正すると捗る
typoとかもチェックしてくれるし
2018/03/09(金) 21:09:01.46ID:BWrGum71
typoってそこまで問題になるかな。
マクロを大きな塊で作るとか、途中でテストしないとかじゃないと問題になるような発生の仕方しないと思うんだけど。
2018/03/09(金) 21:27:32.88ID:Y3Dk8KBt
変数名ミスあるある

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

頭のおかしな部下を持つ上司に同情するわ
2018/03/09(金) 23:30:45.58ID:s0Ox43/Q
ソダネー
348デフォルトの名無しさん
垢版 |
2018/03/09(金) 23:48:40.84ID:jpL8SCkU
VBAというプログラミング言語は、昔からある枯れた技術だけど
エクセルを使っていない職場は、無いと言えるぐらい普及しているから
業務のAI化の流れから需要が減る可能性は少ないだろうなあ
349デフォルトの名無しさん
垢版 |
2018/03/10(土) 00:01:14.03ID:4nlfLUix
>>348
エクセルよりお前の需要の心配しろよ能天気さんw
2018/03/10(土) 00:38:30.02ID:PZ/jlzJE
パソコンによって紙が減るって言われていたのに印刷物が増えたように、
AI化するとカバー出来る業務が増えた結果、逆に忙しくなりそう。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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