Excel VBA 質問スレ Part60

■ このスレッドは過去ログ倉庫に格納されています
2019/03/16(土) 20:39:09.64ID:6HWXzj9o
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part59
https://mevius.5ch.net/test/read.cgi/tech/1549692750/
2019/04/16(火) 19:02:23.87ID:g+D3y3HH
>>695
"修正"の文字列が凶悪過ぎて無理だな
"修正"がなければsplit()で分けて、日付データにしてしまうのが一番手っ取り早いんだけど
2019-1-2-修正1
なんてあったらお手上げ
2019/04/16(火) 20:00:26.84ID:dymnkria
>>695
ファイル名ではなくファイル自体の更新日で比較は?
可能ならファイル名の付け方を考え直した方がいいと思うが
2019/04/16(火) 20:24:24.92ID:dymnkria
すまん>>696読んでなかった
Dir("1-1*")で"1-1修正"も読み込まれるはず
ファイル名が"1-1 修正"になってるってことはないか?
それとDirはファイル名昇順で返すから比較せず最後に読み込んだファイル名を使えばいいと思う
2019/04/16(火) 20:48:56.77ID:akR/dKKk
>>699
1-1修正
1-1最新
なんてのがあると、タイムスタンプ無視して修正が最後になるぞ
コメントが不定なら、数字とそれ以外の文字を判定して切り分けるしかない
2019/04/16(火) 20:53:51.23ID:g+D3y3HH
1-1修正
1-12回めの修正(「1-1 2回めの修正」のつもり)
ってパターンもあってもうこれ絶対にヤバイ処理
2019/04/16(火) 21:09:05.64ID:dymnkria
>>696
すまん更に勘違いしてた
"1-1修正"が出て来ず他のが出てくると言ってるのかと勘違いしてた
>>698が無理ならファイル名をsplitで"-"で切って、3つ目の文字列から左2文字のうち数字だけ取得する
ただし>>701の言うようにコメントの最初に数字が来ることがあるならどうしようもない
2019/04/16(火) 21:16:48.22ID:nc1CJru4
postfix扱いの「コメント」に規則性がないのならそもそも最新版を特定する術がない
運用の方を変えるべきだろう
2019/04/16(火) 21:43:33.41ID:g+D3y3HH
最新版以外はoldフォルダ作ってそこにほおりこんでおく
そうすれば超簡単に出来る
2019/04/16(火) 22:27:43.62ID:XA2NKST4
>>それぞれの日のファイルのうち最も新しい物
新しいとする基準は何?
ファイル名で修正1修正2ってあったら修正2が最も新しい?
日付部分のyyyy-mm-dd(ただしmmとddは一桁もあり得る)が固定なら
毎回癖のあるdirとワイルドカードなんて使わないでファイルリストすべて取得してから処理したら?
706デフォルトの名無しさん
垢版 |
2019/04/17(水) 05:30:44.38ID:pTGno1t2
新たにVBAライブラリを作ったりする人が全く出ないのが取り残された言語の欠点
他の言語は次から次へとライブラリが追加されてより便利に快適にそして簡単になるのに
終わってるVBAには将来性も可能性もないから仕方ないけどね
2019/04/17(水) 05:35:40.84ID:JxFBTN19
Sub macro1()
  ChDir "指定フォルダ"
  指定日 = "2019-1-1"

  f = Dir(指定日 & "*.*")
  Do While f <> ""
    t = timestamp(指定日, f)
    If t > 最新t Then
      最新f = f
      最新t = t
    End If
    f = Dir()
  Loop

  MsgBox "日付が" & 指定日 & "のうち最新の物は" & vbCrLf & _
      "ファイル名 " & 最新f & vbCrLf & _
      "日時 " & Format(最新t, "yyyy/mm/dd hh:mm")
End Sub

'ファイル名の日の桁数をチェックして、一致したらタイムスタンプを返す
'一致しなかったら0を返す
Function timestamp(s, f)
  w = Mid(f, Len(s) + 1, 1)
  If "0" <= w And w <= "9" Then
    timestamp = 0
  Else
    timestamp = FileDateTime(f)
  End If
End Function
2019/04/17(水) 07:27:27.84ID:Hz/wxCvM
>>706
確かに聞かないな
最新ライブラリで10年前とかの世界だ
709デフォルトの名無しさん
垢版 |
2019/04/17(水) 08:09:13.25ID:pTGno1t2
フォームにしてももう少しグラフィカルだったりアニメーションだったりするだけでイメージが全然違うんだけど
頭の良い誰がライブラリを作ってくれんかね
2019/04/17(水) 08:31:50.49ID:WtvpNXmt
多くの人にとって有用なライブラリを作れるほどの能力のある人なら、
VBAを便利にすることはVBAの延命や利用人口の増加を招き、それは即ち社会正義に反する行為であると理解しているからね
2019/04/17(水) 08:45:03.90ID:H1v/4DiF
>>706
vbaにライブラリって何か必要?
中途半端なの出てきてもそれ覚えるの面倒なんだよね
jQueryぐら便利で誰もが使ってるようなのならいいんだけど
2019/04/17(水) 08:46:34.13ID:H1v/4DiF
>>710
まぁそういう事でもある
2019/04/17(水) 08:50:05.84ID:W5uIlXM9
VBAのライブラリ作るよりCOMにしちまうんじゃないの?
VBA以外にも使えるし。

そしてCOMのライブラリなんて腐る程有るんだが何を言ってるんだ?
2019/04/17(水) 08:50:52.58ID:W5uIlXM9
実際、俺はVBA用にC#でライブラリ作ったりしてる。
2019/04/17(水) 09:15:11.32ID:YsMOLNBK
>>714
二つ質問

それってCreateObject でインスタンス作って使うの?

どういうジャンル/用途のもの?
716デフォルトの名無しさん
垢版 |
2019/04/17(水) 09:30:09.47ID:vaRlkwxk
フォームUIのライブラリを希望
2019/04/17(水) 11:17:15.83ID:SIKwKn9k
>>711
> vbaにライブラリって何か必要?

こういう文脈のライブラリなら
アルゴリズム系のライブラリだろ?

ソートとか配列に対する処理(合計求める)とか
VBAの言語の範囲内で実装できるアルゴリズム

あと大きめのやつならCSV読み書きとか
テンプレートエンジンとか
2019/04/17(水) 11:18:11.01ID:SIKwKn9k
>>711
> 中途半端なの出てきてもそれ覚えるの面倒なんだよね

ライブラリの関数名はどの言語にも有るような名前にするので
一般的なプログラマなら覚えるまでもない
2019/04/17(水) 11:27:39.85ID:YsMOLNBK
>>717
一般アルゴリズム系とかCSVならいっぱいあるでしょ

テンプレートエンジンってなに?
2019/04/17(水) 11:36:17.09ID:H1v/4DiF
CSVの読み込みほしいな
住所の番地"1-1-1"を読み込むと日付になって超めんどい
幾つか試したけどどれやっても日付型になってしまった
今思えば頭にピリオドでも付ければ良かったのかもしれん
2019/04/17(水) 11:59:21.48ID:o6t++Kqu
>>695-707
Ruby では以下。
ただし、Date オブジェクトに変換して比較しているから、同じ日付の順序付けは、不明

require 'date'

filenames = %w(abc 2019-1-11さらに修正1 2019-1-11修正2 2019-1-11修正1 2019-1-11 2019-1-1 2019-01-01)

re = /^(\d[\d-]+)/ # 数字で始まり、数字かハイフンだけが続く

# マッチしたものだけを集めて、ソートする。md[ 1 ] は、capture 部分
p results = filenames.select { | fn | fn.match( re ) }
.sort_by { | fn | md = fn.match( re ); Date.parse( md[ 1 ] ) }

p results.first

結果
["2019-1-1", "2019-01-01", "2019-1-11", "2019-1-11修正1", "2019-1-11修正2", "2019-1-11さらに修正1"]

先頭
"2019-1-1"
2019/04/17(水) 12:02:53.03ID:H1v/4DiF
>>721
もうすぐ無くなる言語の話なんてやめようよ
723デフォルトの名無しさん
垢版 |
2019/04/17(水) 12:23:13.47ID:vaRlkwxk
ルビーバカシネ
724デフォルトの名無しさん
垢版 |
2019/04/17(水) 12:27:00.37ID:MK1B34x/
ライブラリで有効なのは作るのが面倒なUIだろ
グラフィク系にこそライブラリの有り難みがある
2019/04/17(水) 12:39:27.60ID:epFgj98z
そもそもVBAに固執するのは他のものを覚えたくないからであって、
いくら便利なものがあろうと誰もそれを探そうとしないし覚えようともしない
それができる人ならとっくにVBAなんか卒業してるよ
2019/04/17(水) 12:41:31.12ID:H1v/4DiF
>>725
卒業てw適材適所だよ。EXCEL関連の時はvba、webはphp+js、ゲームはC#
これぐらい使い分けときゃだいたいok
2019/04/17(水) 12:44:56.01ID:epFgj98z
>>726
VBA使う人には他のものが使えないから使ってる人と単に選択肢の一つとして使ってる人がいて、君は後者であるというだけだ
大多数は前者なわけだし、後者の人はVBAでやりづらいことを無理にVBAでやろうとはしないからライブラリ云々は問題にならないだろう
2019/04/17(水) 13:11:34.01ID:bcLxo1zC
>他のものが使えない
は他のものを覚えたくないだけでなく
他のものを使わせてもらえないというのもある
2019/04/17(水) 13:16:11.24ID:epFgj98z
>>728
仕事を選べないor技術的裁量を持てない立場に甘んじているならその程度の能力ってことだ
本質的には大差ない
2019/04/17(水) 14:04:48.27ID:bcLxo1zC
使わせてもらえないのはごく一部の相手なんですけどね
ほかは普通にいろいろ使ってる
2019/04/17(水) 17:43:39.08ID:yZ8b1h33
アドインはどうよ?
732デフォルトの名無しさん
垢版 |
2019/04/17(水) 18:24:57.64ID:nv4avm/j
自治体だと、テキストエディタすらウインドウズ標準のものしか使えない。インターネットから切り離されてる不自由な環境なので、VBAとかVBSは重宝される、らしい。
2019/04/17(水) 18:30:47.49ID:SIKwKn9k
>>732
そういう馬鹿なところのために、
マイク・スピーカー端子経由でデータのやりとりをする
ツール作ったら便利なのだろうかね?
734デフォルトの名無しさん
垢版 |
2019/04/17(水) 18:35:35.55ID:nv4avm/j
>>733
頼む、作ってくれ!、とのこと
2019/04/17(水) 18:36:55.93ID:W5uIlXM9
個人的には申請出せば色々使えるけど、それが面倒くさいというのもある。

どうせ、VBAでどうとでもなる。
よっぽどどうにもならない場合は申請出すけど。

最近流行りのRPAとか全く必要無い。
簡単にソース作成する個人ライブラリが既にある。
2019/04/17(水) 22:16:54.35ID:JxFBTN19
PC-8001ではカセットテープにプログラムを保存したんだよな
それを最近のPCで録音して、音声ファイルからプログラムデータを復元するWindowsアプリがフリーで公開されてる
2019/04/17(水) 22:20:25.13ID:WIrsZtM7
FAXみたいな原理だな
2019/04/17(水) 23:42:32.81ID:yDlOAXUg
下手なの作ってフリーズしたり過去のデータが消えたら責任とれるの?って話になるからな
2019/04/18(木) 00:51:43.65ID:247lpqF0
ITに戦略がないとそうなる
740デフォルトの名無しさん
垢版 |
2019/04/18(木) 05:33:25.25ID:nRTUz+FV
ライプラリってそんな知る人ぞ知るってマイナーな使い方じゃなく簡単に情報入手出来るようになって価値があるよね
汎用性があり改変もしやすくオープンなのが増えると良い。
そんなのVBAじゃなくともって言う人もいるけどそれでもVBAが存在して使用されてるんだから有用なライプラリはあった方が良い
2019/04/18(木) 07:22:37.37ID:hrv1qdCF
GithubでVBAっていれて検索すると3000以上のリポリトジがあるけど、
どうすれば有用なものが見つけられるか
まるでわからん
2019/04/18(木) 07:34:41.63ID:z0cRqxOE
VBAが有用じゃないし
2019/04/18(木) 09:32:20.75ID:bMzi6GVd
なんとなくvba利用しているような運用職なんですがモノは良いのでもっと横展開出来て再利用性高いものが作れたら作って欲しいと言われました

再利用性が高いとはつまりどういうことでしょうか…
モジュールをそのままコピペして全く別のものでも動くように…?
2019/04/18(木) 09:40:51.83ID:Mwr+qk/V
>>743
決め打ちとしてない?
データ全部を処理する時にfor i = 1 tto 100000とかテキトーな数値にしたり
そうじゃなく、最終行をちゃんと取るとか
2019/04/18(木) 09:44:43.23ID:PeuY0IP9
>>743
言ってるやつに聞け。

まあどうせ無理だろ?
どうせそいつが言ってるのは、他の部署でも使えるようにしろってことだろうから
業務内容を統一したものに "変更" しないと無理ですとか言っとけw
2019/04/18(木) 09:47:38.84ID:PeuY0IP9
> 横展開出来て再利用性高いものが作れたら作って

↑これ無理なんだよ。

今あるものを再利用性が高いものにすることはできない。
ただし「再利用性が高いもの」を使うことはできる。

どういうことかというと「今あるもの」は再利用できるものと
再利用できないものが合体してる形。

そこから再利用できるものを分離することはできるが
どうしても再利用できないものは残る。
2019/04/18(木) 10:15:32.81ID:66UDqgKZ
そうやって責務を分離して再利用性の高いライブラリを構築することは可能。
しかし使いこなすのが難しくなる。
依存関係や凝集度をちゃんと考えた良質なライブラリは玄人受けはするだろうけど、
機能が細分化し抽象性も増すから一般人には豚に真珠状態。
2019/04/18(木) 11:53:10.58ID:sbpDgPak
まずはモジュール化
その会社の業務内容に合わせて、部署が違っても共通で使える部分をライブラリとして整備する
まあ言うのは簡単だけど、実際に作るのは死ぬほど大変なんで、理想の高さに比例した地獄が待ってるんだけどな
2019/04/18(木) 13:21:10.78ID:PeuY0IP9
> その会社の「業務内容」に合わせて、「部署が違っても共通で使える部分」

そんなものは存在しない。

業務内容から生み出されている時点で、業務にべったり依存してる。
再利用性の高いライブラリっていうのは、業務内容を切り離している。
業務内容と関係ないから、共通で使える。
2019/04/18(木) 13:36:25.79ID:/sUch5Kf
自分の理解で合ってるか確認したいんだけど再利用性高いてのは決め打ち無くして例えば引数とかで使えるようにしてモジュールなりを使い回せる状態
だけども再利用性ない部分(呼び出し元?main?)を作らないといけない限りこれ1つあればどの業務、案件でも使える!てことにはならない
ライブラリ化?とか再利用性を高めることは出来るけど中々難しく初心者には険しい
て感じでおけ?
2019/04/18(木) 15:07:10.61ID:66UDqgKZ
>>750
ライブラリと業務寄りアプリの難しさは別種のもので初心者にはどっちも難しい。
とはいえライブラリは小さな便利ツールをピンポイントで一個一個作っていくことができる点で
ハードルが低い面はある。
752デフォルトの名無しさん
垢版 |
2019/04/18(木) 15:19:41.42ID:YY/ze1GU
無理だと言うやつには無理のんだろう
汎用性の高いのは別に問題ないのでは?エクセル自体はどの部署でも使ってるんだから追加でどこまで機能を絞るか縛りを緩くするかの問題でしょ
2019/04/18(木) 16:05:19.35ID:FYzqO+ri
プログラム板の他スレじゃ相手にされない半端者がここならドヤ顔で語れるだろうって調子に乗ってて草
754デフォルトの名無しさん
垢版 |
2019/04/18(木) 17:34:24.27ID:Mwk0+ScA
他プログラムはサンプルや情報が多いからVBAより簡単に現象を獲得できる
755デフォルトの名無しさん
垢版 |
2019/04/18(木) 17:41:24.05ID:Mwk0+ScA
そもそも他言語はシンプルだしVSならガッツリとインテリセンスが効くから簡単に書けて工数も少なくて済む
文法もVBAは難しい部類
2019/04/18(木) 21:55:37.18ID:CoHPfDW+
難しいというか不合理なんだよな
内包表記やヌル安全やモナドみたいに別に難しい概念があるわけでは無い
2019/04/18(木) 22:12:05.40ID:sbpDgPak
完全な言語なんて存在しないし作るのも不可能
2019/04/18(木) 22:18:06.03ID:rY75T8tq
>>757
小学生みたいな発想スね
2019/04/18(木) 22:25:43.62ID:NyxG62A4
漠然とした話からは何も産まれない
2019/04/18(木) 23:02:30.65ID:ZviCYbcp
マクロでブック開くと、データ量が多いブックの場合開き終わるまで拘束されてしまう。
開き終わってセルに書き込みできるまでに他の処理をさせたい

if application.Ready=False then
(その間にやる処理)
endif

こんな感じに、開くまでの間になにか処理をさせたいのです。
なにかできる方法があったら教えてください
その重いブックは自分で作ったものじゃなくてすぐに改善はできない状況です
よろしくお願いします
2019/04/18(木) 23:26:59.03ID:1fisAtwZ
一瞬、マクロを実行するファイルそのものを開く時の待ち時間かと思ったわ。
VBAじゃなくて、VBSで開かせるなら出来なくもなさそうだけど。
762デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:32:51.10ID:RfIDmYfE
VBAやUWSCのプログラムちょっとできる程度なんだが組み込みのソフトウェア部に転身しろと先輩から言われる。
ちなみに今は製造部の使えないやつ扱いをうけている模様。
これは辞めろってことか
2019/04/18(木) 23:38:14.35ID:rY75T8tq
>>762
現場が分かるシステムが欲しいんだろう
かなり必要とされてるように見える。行ってみたら良いだろう
いずれ製造なんて自動化でなくなる部門何だしている
2019/04/18(木) 23:39:24.29ID:ycswSyUn
>>760
他の処理ってのがExcel操作だったら無理
ExcelはSTAのCOMなので複数のスレッドからアクセスしても常にタスクを直列にシリアライズして逐次処理する
一個の処理で詰まると後が渋滞するだけ
Officeの他のアプリのVBAとかPowerShellとかJSとかVBSとか、別の言語のプログラムをキックして他のエンジンで処理を実行させることは可能
後でウィンドウなりファイルなりにアクセスすれば処理結果も取れるし
765デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:42:06.58ID:RfIDmYfE
>>763
ありがとう。
その自動化するための機械作ってるのがうちの会社なんだよね。
機械のソフトウェアだからCとかパイソンになるのかな?
一応情報卒なんだけど自信ないよ
2019/04/18(木) 23:47:17.30ID:NyxG62A4
>>765
何で遅いか調べないの?
外部リンクとか、シート間参照が多いとか
2019/04/18(木) 23:47:45.92ID:rY75T8tq
>>765
そうなのか
言語は多分C辺り、pythonは無いと思う
一度面談受けたら?分からない事がさすがに多すぎる
2019/04/18(木) 23:50:56.85ID:NyxG62A4
>>766
すまんアンカー間違えた
769デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:51:11.62ID:RfIDmYfE
>>767
Cだよなぁ、ポインタで挫折しちゃったけいけんがあるんだよなぁ。数字の羅列はやってても楽しくないんだよなぁ。グラフィックに実行結果出ないとつまらないんだよなぁ。
でも一生製造で終わりたくはないし…話ししてみようかなサンクス
770デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:51:26.61ID:RfIDmYfE
>>768
ええんやで
2019/04/18(木) 23:59:44.00ID:tULlneIt
>>764
Excel.Application複数起動してもダメなの?
2019/04/19(金) 05:04:11.19ID:F+IfR3tb
accessのテーブルに接続するデータテーブルをVBAでrefreshallした時に、
読み込み完了前に次の処理に進むのを止めることできますか?
stopで一時的に止めればいけるけれど、読み込み完了後に次処理に自動的に
進めたいです。
2019/04/19(金) 08:11:56.05ID:WxAK0tT/
>>771
たぶんできる。
>>764は思慮が足らないと思う。
774デフォルトの名無しさん
垢版 |
2019/04/19(金) 10:27:04.15ID:L5evqwYE
>>773
Excel2010までは簡単だったがExcel2013から複数インスタンスの起動は難しくなったようだな
ただ、所詮重い処理をそのままにして複数起動してももっと重くなるよな

そもそも、重い原因を確認しないと、自動計算を止めれば早くなる可能性もあるが
それをやっていいかもわからん
2019/04/19(金) 11:03:21.04ID:Bg8kiXU6
正直、余計なことをせずに静観しておいたほうが良い気はする
2019/04/19(金) 11:49:18.40ID:tnpUi0yI
これもそうだな 漠然とした話からは何も産まれない
2019/04/19(金) 13:51:24.35ID:ZnDHFpRl
けどこのスレの人間って、無駄話で罵り合いするの好きだよね w
2019/04/19(金) 14:22:48.38ID:L5evqwYE
漠然とした話から連想ゲームして、自分語りを始める
で、好きな事違うから無駄な話が続くんでない
2019/04/19(金) 15:58:50.09ID:k3MrA8ng
VBA界には有名人がいないから、いじる対象がないってのもある
他言語だとコミュニティの顔みたいな存在がちらほらいるけどVBAは活動自体ないからな
780デフォルトの名無しさん
垢版 |
2019/04/19(金) 18:35:20.89ID:bifIXaiQ
ないねぇ
オープンマインドじゃないし自分の考えが正論だと信じ込んでるから新しい発想は受け入れないもん
全部排除
2019/04/19(金) 19:33:45.34ID:F+IfR3tb
>>772
解決しました
2019/04/19(金) 21:09:28.46ID:+TCHgQUv
書道家にWord使ったほうが早いのにとか言っても仕方ないだろ?
VBAは伝統芸能なんだよ
2019/04/19(金) 21:28:42.21ID:hMAGCQp2
書道家だってWordくらい使うだろ
2019/04/19(金) 21:31:43.30ID:GnXLTXUb
しょれはどうか?
しょどうか?
2019/04/19(金) 22:09:23.17ID:muLZwW/F
>>780
オープンマインドってなんですか?
2019/04/20(土) 00:10:38.45ID:xcWVlBQQ
昇順で並べたデータ(日付など)の変わり目に一行挿入を繰り返すマクロは作れるかな?
セルの差分の列を作って0でないところに行挿入を考えてるんだが、他に何かないでしょうか先生方
2019/04/20(土) 00:19:14.02ID:qwsd80fG
>>786
上下のセルの内容が同じじゃなかったら挿入
2019/04/20(土) 00:30:38.72ID:xcWVlBQQ
>>787
これは早速素晴らしい案をありがとう!よほどシンプルに行けるわ
2019/04/20(土) 00:41:38.87ID:lNRl64h3
>>788
念の為、
for i 最終行 to 2 step -1
で回すんだぞ
790デフォルトの名無しさん
垢版 |
2019/04/20(土) 01:43:17.46ID:ojpyozsg
このスレだとプログラマではないひとの質問が書かれるか。
2019/04/20(土) 02:10:30.65ID:SAylvlqW
>>789
行がずれるから逆から回すということかな、助かりますありがとう!
2019/04/20(土) 02:37:10.84ID:lNRl64h3
>>790
そりゃそうだろう
vba使う層って事務のにーちゃんねーちゃん+できる営業マンが片手間に使うぐらい
793デフォルトの名無しさん
垢版 |
2019/04/20(土) 06:25:29.61ID:X4+f+v7V
VBAをプログラムだと思ってる人はいない
2019/04/20(土) 07:10:53.95ID:ZcIJD8m+
きみの勝手な思い込みだよ、
と思われたくないなら客観的な根拠をあげた方がいいね
2019/04/20(土) 08:13:49.91ID:tWWHyzwg
エクセルの画面が右上に飛んで行って、
画面に「どこいくね〜ん!」って表示させるのはどうでしょう?
2019/04/20(土) 08:27:11.00ID:9HZyCDJw
>>779
居るだろ。
君が知らないだけじゃね?
パッと10人くらいは思いつく。
797デフォルトの名無しさん
垢版 |
2019/04/20(土) 09:01:22.69ID:Khb9FcyX
>>796
例えば誰?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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