X



Excel VBA 質問スレ Part78
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 5f2e-juJ7)
垢版 |
2022/10/30(日) 13:43:16.31ID:6yf2E1Gz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part77
https://mevius.5ch.net/test/read.cgi/tech/1658009255/

-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0005デフォルトの名無しさん (ワッチョイ 1924-NQ1M)
垢版 |
2022/10/30(日) 15:40:36.74ID:pPckLpAv0
初心者はなんで自分の能力でできないことをやりたがるんだろうね
0008デフォルトの名無しさん (ワッチョイ 13da-ee5o)
垢版 |
2022/10/30(日) 16:51:58.49ID:5A/AyQcT0
出来なかったことがやれるように成ったらうれしかろ? 次のステップは踏みたいじゃん 階段途中で足止め食うよりは
https://chie-pctr.c.yimg.jp/dk/iwiz-chie/que-13121424663?w=999&h=999&up=0
前スレの最後の質問は、ログっぽさ出そうと苦労しても出力が一瞬で終わってガッカリすると思う
よっぽどひつこいloopとかさせて延々と処理し続けるコード書くなんてのも無駄の極みだし
出力に遅延処理させる? Excel上ではとっくに結果出てるのにログっぽい画面ではダラダラ出力し続けさせる?
うん、悪くない 関係無いが、マトリックスのOPの象徴をマトリックス・コード デジタル・レインとか呼ぶらしい 今更知った
0013デフォルトの名無しさん (ワッチョイ 13da-ee5o)
垢版 |
2022/10/31(月) 11:08:09.71ID:y4w9EAHl0
しばらく前からそういう層は増えてる 黎明期のような、積極的に見知らぬ世界に飛び込もうって勢いじゃなく
仕事でやらざるを得ないからしょうがなく操作する、でも分からん、教えて
検索しようとしても、やたらと広告メインのサイトばかりヒットして、ロクな情報に辿り着けない ンなもん使えねー に成る
便利も度を超すとアタマがパーに成るだけ 老獪なじじい共は相手が美少女だとでも思い込んで、手取り足取り懇切丁寧に教えてあげて
やる気(ぜってーモチベーションとか言わない強靭な意志)を引き出してあげるよう、つべこべ文句垂れてないで、やよ励め
0015デフォルトの名無しさん (ワッチョイ 134f-JQHF)
垢版 |
2022/10/31(月) 19:53:47.30ID:pfNUNfDW0
質問です。
ボタンを押して時間が長く掛かる処理を実行する際、
他のとあるボタンを押したときにピタッと処理を中断するプログラムって書くことは可能ですか?
エスケープキーとかで中断させようとすると、中々中断されなかったり、固まってしまうことがあるもので・・・
以下の条件は満たして欲しいです。
・中断用のボタンを押すまでの処理実行速度は落とさない。
・中断用のボタンを押すとピタッと止まって実行している処理を中断してプログラムを終了する。
※尚、途中でDBを読み込むなどVBAに依存しない処理は含まれないものとします。
0017デフォルトの名無しさん (ワッチョイ 134f-JQHF)
垢版 |
2022/10/31(月) 22:50:53.16ID:pfNUNfDW0
>>16
なるほど、やはり無理なnですね
諦めがつきました。ありがとうございます。
0018デフォルトの名無しさん (ワッチョイ c1da-Tk+f)
垢版 |
2022/10/31(月) 23:00:31.00ID:4/W2uk2s0
>>15
作り方によるが、長くかかる処理がLoop回数が多いようなパターンであれば

1.長くかかる処理の中に、ある条件が成り立てば以降の処理をしないで終了するようにしておく
2.Doeventsを長くかかる処理の中に入れる
3.ボタンを押したときに上の条件が成り立つようにする

なら一応それっぽくできるかも
0019デフォルトの名無しさん (ワッチョイ 7b66-FQW+)
垢版 |
2022/11/02(水) 12:00:56.68ID:LYlR/saz0
win10 office2019

ループの外で
Dim ar() as long
してある配列を
そのあとのループの中で初期化してかつ、空のままUboundでも使いたいです。
今はLong宣言を諦めてVariantにしてループ内で
ar = array()
してそのあと空のままUboundに使ってもエラーにならないようにして使っています。

Redimで初期化してLongの空配列でもUbound出来る方法で、誰に配っても問題なく動くというのはないでしょうか?
0023デフォルトの名無しさん (ワッチョイ 5149-K2BO)
垢版 |
2022/11/02(水) 17:23:30.25ID:CTo+D6um0
>>19
たとえばUBound2とかいう名前で、空だったら-1を返す、そうでなければ
UBoundの値を返すといった関数を作って、渡した人にはUBound2を使ってもらうとか。

あるいは空に戻すときに、ReDim ar(-1 to -1) as longのようにするとか。
実際には空の配列ではないけれど、 UBound(ar) < 0 のような形で判定できる。
0024デフォルトの名無しさん (スッップ Sd33-iO6U)
垢版 |
2022/11/02(水) 17:38:59.67ID:u9JRuLqrd
自分は基本的に動的配列は>>23の様な初期化条件をきめておいて操作してるわ
使ったことなくて今ためしたけど
if (not ar) = -1 then
の様な式で要素数未定義が判断できるけど
こんなことしても事故のもとだからなぁ
002619 (ワッチョイ 7b66-FQW+)
垢版 |
2022/11/02(水) 18:07:41.93ID:LYlR/saz0
>>23
ありがとうございます。
UBound2というのは変数でしょうか?

ttps://qiita.com/Q11Q/items/a2d61545d9e5c4e15f22
渡すというのは完成したマクロファイルを他のパソコンで動かすという意味です。

dim Ary()
Ary = Array()
この初期化がとても便利で空のままUBound(Ary)してもエラーになりません。
その代償でVariant型にせざるを得ないのが気になってしまって。

-1 to 1という初期化方法はいいですね。
とても参考になるレスをありがとうございました。
これで失礼致します。
0027デフォルトの名無しさん (アウアウウー Sa9d-NQ1M)
垢版 |
2022/11/03(木) 02:19:49.23ID:tGqLN8Kua
エラー処理は誰もが苦労する所だな
0028デフォルトの名無しさん (ワッチョイ 1301-pRvw)
垢版 |
2022/11/03(木) 08:29:16.93ID:NbsIPyEs0
VBAはだいたいの機能が備わってるけどこういう基本的なところが抜けてたりするから
>>19はよくある疑問なんだけどそういう機能が無いので>>24みたいな非公式なTipsが編み出されたりしてるわけで
0034デフォルトの名無しさん (ワッチョイ 134f-JQHF)
垢版 |
2022/11/03(木) 21:19:20.67ID:uJ5qkIw80
>>33
そういう目的達成のためなら
金出して人に作ってもらうのが一番早い
0036デフォルトの名無しさん (ワッチョイ 3909-iO6U)
垢版 |
2022/11/03(木) 22:25:29.94ID:6JQwVlSC0
>>34
最終的には頼みますけど、自分である程度は理解していなと
ちょっとしたカスタマイズや金額の相場がわからないので
まずは自分でやってみようと思いました。
最低限の知識くらいはと。
0037デフォルトの名無しさん (ワッチョイ 137c-iO6U)
垢版 |
2022/11/03(木) 22:37:23.30ID:hk926ywx0
あー、昔そういうの作った気がすると思ってほっくり返したら出てきたわ
https://uploda1.ysklog.net/uploda/7e9d14b129.jpg

確か全銘柄から値が急激に上下した銘柄をピックアップしてた

知ってると思うけどHPからとってくるデータは基本時間遅らせてるからデイトレするなら役に立たないよ
昔はどっかの証券会社でAPIかなんか提供してたはず、今はわからんす

真髄とかってチラ見だけどサイト良いね、ただ印刷とかグラフとか重要じゃないものも等価に説明してるんで
自分にとって必要なものから覚えていった方が良いかも
0038デフォルトの名無しさん (ブーイモ MMdd-ee5o)
垢版 |
2022/11/04(金) 00:04:38.11ID:musbajKsM
>>36
たいがいのトレードアプリは素人が思いつくような機能は全部入ってるから、オーダーメイドやカスタマイズの必要なんかない
わざわざ作ってもらうのは金の無駄だし、今から勉強するのは時間の無駄
0039デフォルトの名無しさん (ワッチョイ 137c-Iwn0)
垢版 |
2022/11/04(金) 00:55:51.96ID:3MIAhDZX0
まぁそうなんどけどね
株は簡単に言うと多数決で勝つ方を読むゲームだから公的な提供データをみた他大多数がどう考えるかを先読みする力が必要
そして先読みするにはみんなと同じことやってちゃだめな部分もあるのよ
0040デフォルトの名無しさん (ワッチョイ 694f-hZr9)
垢版 |
2022/11/04(金) 03:53:57.13ID:xdVLdIYL0
HP で公表している、明地式3点チャージ法だけやっておけば?

乖離率が大きい、売られ過ぎ銘柄の戻りを狙う。
急落の瞬間に買って、上がればすぐに売る

ほぼ、100%当たるけど、
相場が大暴落する時だけだから、なかなか発生しないけど
0042デフォルトの名無しさん (ワッチョイ 694f-hZr9)
垢版 |
2022/11/04(金) 08:44:29.23ID:xdVLdIYL0
Python で有名なYouTuber・キノコードは、
一目均衡表など、株価の指標の作り方の動画とか出していなかったか?

株価などは、Python, Ruby だろう。
GUI は、HTML, CSS, JavaScript。つまり、ウェブアプリ。
簡単に動くのは、Jupyter Notebook

VBA では作らない
0044デフォルトの名無しさん (ワッチョイ 137c-Iwn0)
垢版 |
2022/11/04(金) 10:52:13.03ID:3MIAhDZX0
>>37
一応念のため
この表は数秒おきに自動作成されるものでオリジナルの計算をしてる
シート名見ればわかるかもだけどVBAで出来ないわけじゃない

逆に>>38でも書かれているけど既存のチャートとかはもうあるんだからそれを使うのが良いと思う
0047デフォルトの名無しさん (ワッチョイ c1da-NQ1M)
垢版 |
2022/11/04(金) 18:56:10.58ID:SA7ElMvZ0
スレチと知っててこんなことも知ってるっよって自慢したいのでしょう
他に友達いないかわいそうな人ってわかってやれよ
0049デフォルトの名無しさん (ワッチョイ 924f-oAOw)
垢版 |
2022/11/05(土) 07:58:50.01ID:LfhrqaaU0
ま、そういうこった
ガッツリやりたいなら.NetでASP.NetのC#か
数学的な要素が強いならPython辺りの板へ行けばいいだろう。
どうしてもEXCELでやりたいならWebのEXCELの方が向いているからOfficeScriptだな。
多分そんな板立ってるか分からんから
自分で立てるか似たようなJavaScript板へ行けば。
0053デフォルトの名無しさん (オッペケ Sr79-pbv6)
垢版 |
2022/11/06(日) 10:25:52.00ID:HzrUdJhmr
>>52
そんな事全く書いてなくね?それはあなたの思い込みでしょ
そもそも「まずは自分でやってみようと思いました。最低限の知識くらいはと。」って書いてあるんだから
あなたが判断することではない

つまり質問だけに答えてればいいんだから余計な事は言う必要ないし、答えたくなければ黙ってろカスってことね
0054デフォルトの名無しさん (ブーイモ MMb2-0JPN)
垢版 |
2022/11/06(日) 12:27:37.53ID:V51Xvaw0M
別に厳格なルールはないけどな
ここって質問ないときはこうやってダラダラとやってる感じじゃん
そこを個々の主観で縛っていったら一番窮屈な人にあわさるがそれがお望みか?
0056デフォルトの名無しさん (ワイーワ2 FF1a-jAYC)
垢版 |
2022/11/06(日) 20:36:11.37ID:riDqZ27VF
よもやよもやだ
0057デフォルトの名無しさん (ワッチョイ 328b-C1rH)
垢版 |
2022/11/06(日) 21:56:54.24ID:OR5OK3k20
メソッドの後ろにスペースを入れると、引数候補が表示される時とされないときがあります。この違いはどのように考えれば良いでしょうか。
例えば、worksheets.addでは候補が出てくるのですが、activeworkbook.closeでは出てきません。
0064デフォルトの名無しさん (ワッチョイ 924f-oAOw)
垢版 |
2022/11/11(金) 08:12:21.32ID:SalKsxDp0
>>63
知らん
C#の環境があるならアドイン作ってVBAから呼び出せばいいじゃない
0065デフォルトの名無しさん (アウアウウー Sacd-jAYC)
垢版 |
2022/11/11(金) 15:05:26.45ID:QOE8vLcla
>>57
うろおぼえだけど、戻り値がどうなってるかによる
Worksheets.Addは明確にWorksheetsコレクションのAddメソッドのことなのでインテリセンスがちゃんと機能する
ActiveWorkbook.Closeは、ActiveWorkbookが確実にWorkbookオブジェクトを返す保証がないので、Closeメソッドのインテリセンスが機能しない
dim wkBook as Workbook
set wkBook=ActiveWorkbook
wkBook.Close
とでもすればインテリセンスは機能する
0066デフォルトの名無しさん (スププ Sd43-7TzV)
垢版 |
2022/11/16(水) 08:04:06.59ID:iwuklodQd
ExcelVBAからプログミング初めてそろそろ別言語が気になってるんだけど、どのくらいまで習得したら一区切りによさそう?
今は基本的な構文とか覚えてクラスを勉強し始めようかなって所なんだけど
0067デフォルトの名無しさん (スップ Sd03-H0Ic)
垢版 |
2022/11/16(水) 08:50:07.90ID:z9TySYjjd
それで食べていくなら食べていけるだけの事を覚えるまでだし
趣味でモノづくりしたいならつくれるまでだし
ただなんとなくなら適当にどうぞ
そもそも人に聞くことか?w
0069デフォルトの名無しさん (ワッチョイ 154f-FFna)
垢版 |
2022/11/16(水) 11:10:33.08ID:pSETlPcG0
雇用形態による

客先IT 土方奴隷なら、Java, PHP だし、
モダンでリモートワークなら、Ruby on Rails

YouTube で有名な雑食系エンジニア・KENTA の動画でも見れば?
半年で、Railsのポートフォリオを作って、転職する
0073デフォルトの名無しさん (スププ Sd43-7TzV)
垢版 |
2022/11/16(水) 17:09:04.39ID:iwuklodQd
>>66だけど答えてくれた人ありがとう、結構臨機応変にって感じなのね
0074デフォルトの名無しさん (スプッッ Sda1-2U4B)
垢版 |
2022/11/16(水) 18:23:35.40ID:4eEwN6UDd
>>73
Rubyだけは絶対に手を出すな
0075デフォルトの名無しさん (JP 0Heb-BvCT)
垢版 |
2022/11/16(水) 19:20:01.04ID:+GbRkwRhH
>>66
高速化して、オブジェクトの構成覚えて、イベントでなにか記述して
あとはifとfor、foreach、
これだけ使えたら大抵のことはできるだろうから、phpでも使ってみるといいと思う
0076デフォルトの名無しさん (ワッチョイ 1b30-7TzV)
垢版 |
2022/11/16(水) 22:22:53.60ID:9ltX2oUg0
>>74
これ怖い 参考に理由聞いてもいい?
0077デフォルトの名無しさん (アウアウエー Sa13-oZep)
垢版 |
2022/11/16(水) 22:34:06.61ID:DYObOoK1a
クラスモジュールを使ってなにか面白いこと便利なことできないかなあ
今のとこコンストラクタで画面更新や自動計算を切る呪文を唱えるクラスくらいしか作っていないんだが
0078デフォルトの名無しさん (ワッチョイ cd59-LvGQ)
垢版 |
2022/11/16(水) 22:49:19.27ID:UM257iUM0
実務ではクラスモジュールなんて殆ど使わないよ
標準モジュールで機能別に関数をまとめるとかだな
それよりエラートラップや値渡しと参照渡しの違いとか覚えたほうがいい

C#やJavaだとクラスの設計ができるレベルじゃないときついが
0080デフォルトの名無しさん (ワッチョイ 234f-nE6g)
垢版 |
2022/11/17(木) 01:03:56.22ID:ugho+MXj0
>>77
そうだなぁ
きちんとクラスの特性とか多態性とか
基本的なことを押さえていれば
何となくこんなシチュエーションのときに使うって
分かると思うからその辺調べてみれば?

もっとも、VBAでクラスのこと説明してるとこ
あまりないから、JavaとかC#でクラスって
どんなもんかググれば大概出てくるんじゃないかなぁ

VBAのクラスはかなり制限あるし
その辺のこと興味持つようになったらボチボチ
他言語にも手を伸ばす時期だと思うよ
あと、「こんな使い方するんだ」ってのが
知りたければ「デザインパターン」でググってみればいい
これもなんかのヒントにはなるよ
008169 (ワッチョイ 154f-FFna)
垢版 |
2022/11/17(木) 06:50:32.28ID:bNmyZmxA0
Qiita, Zenn, Note, Wantedly、食べチョクなどは、Ruby on Rails。
時価総額100億円ぐらいを目指す、ベンチャー企業がRailsを採用する。
米国では、1兆円超えのShopify, Airbnb, Gitlab などもある

他には、ガーシーが使う、Mastodon はRails 6。
作者のドイツのオイゲン・ロホコは、PHPからRailsに変えた。
Rubyの方が可読性が高いから

米国年収では今の円安で、Rails, AWS Solution Architect などは、2千万円ぐらい。
バックエンド技術者は高い。
AWS, Linux, Docker, Kubernetes、データベースなど学ぶことが多いから

KENTA の天敵・モローは、2年ほど前に、YouTubeで言ってた。
Rubyは滅ぶ。これからはJava・PHPの時代だと

それが今になって急に、Railsのキャリア相談までやり出したw
Java・PHPの仕事は、どうなったの?w

YouTubeのモローの動画。
【2022年版】Ruby on Railsの将来性

KENTAが、PHP, Scala をオワコン認定したから、
PHPのFacebook とか、Laravel を使っているZOZO、
Scalaを使っているTwitter などは、良い開発者を集めるのが大変
0084デフォルトの名無しさん (JP 0Heb-BvCT)
垢版 |
2022/11/17(木) 07:50:17.45ID:pvjBVkzjH
>>81
他の全ての大手は普通にPHP・pythonを使っているのに、
「ごく一部の大手」だけがrubyを使っているのが現状

また、ruby信者は頭がおかしくこのような歪な布教活動を行う特徴がある
くれぐれも騙されないように
0087デフォルトの名無しさん (スプッッ Sda1-2U4B)
垢版 |
2022/11/17(木) 11:29:16.58ID:7HR1FVlLd
>>76
わかっただろ?統一教会みたいな連中に巻き込まれる
0089デフォルトの名無しさん (スププ Sd43-7TzV)
垢版 |
2022/11/17(木) 12:04:27.49ID:i1/jmP1Yd
>>82
>>87
ありがとう、そういうが風潮あるとは知らず.......
0093デフォルトの名無しさん (ワッチョイ 1dce-gPc0)
垢版 |
2022/11/17(木) 17:00:32.50ID:m6w3NGDg0
ラズパイの入門キットが尼で3000円で売ってるからRubyでサンプル動かしてLEDチカチカ楽しいよ
仕事につなげたいなら今はJavaでスマホアプリが一番需要がある
自分のスマホで遊んでもいいし、Windows用のエミュレータも無料で公開されてる
0094デフォルトの名無しさん (スプッッ Sda1-2U4B)
垢版 |
2022/11/17(木) 17:49:39.21ID:7HR1FVlLd
ほら、こうやってRuby、Rubyって
ゴキブリそのもの

そもそもRaspberry PiのサンプルはPythonが圧倒的に多い

Rubyとか言ってる連中に近づいてはいけません
0096デフォルトの名無しさん (ワッチョイ e38b-H0Ic)
垢版 |
2022/11/17(木) 21:44:05.97ID:KK3w9Zce0
VBA + Selenium + Chrome で自動ログインをツールを作っています。

Dim Driver As New Selenium.WebDriver

ログインした後にパスワードを保存しますか?
というダイアログが出て邪魔でしょうがないです。
それを削除する為に

credentials_enable_service  false
profile.password_manager_enabled false

を使うのは分かったのですが、pythonやjavaのコードばかりブログに乗っていて
VBAの文法でどう書けば良いか分かりません。

詳しい方がいたら教えてください。
0097デフォルトの名無しさん (ワッチョイ 237c-tLWi)
垢版 |
2022/11/17(木) 23:24:19.00ID:oqPw0CoV0
>>90
放っておけばっていうのはお前がコントロールしようとしている掲示板の脱線に対してだよ
放っておいても質問があれば勝手に戻るからさ、これ書くの2度目ね

そのことと俺がお前を放っておくのとは意味あいがぜーんぜん違うんだがわかる?まぁ解んなくてもいいけど
あと指図はするけど言われたくないんだよな?
ならその通りにしましょうかね
0101デフォルトの名無しさん (JP 0Heb-BvCT)
垢版 |
2022/11/18(金) 15:59:01.29ID:rkfxbe2GH
間違ってrubyを学習してしまい、無駄な時間を過ごしてしまうことが忍びないのはわかる
しかし、「人生には無駄な学習がある」ということに気づくことも大事な事かもしれない
※rubyの学習が無意味ということは、rubyを学習すればすぐに気づく
0103デフォルトの名無しさん (スップ Sd03-2U4B)
垢版 |
2022/11/18(金) 20:42:45.12ID:2X/Wvhddd
rubyスレは過疎っているもの
0105デフォルトの名無しさん (ワッチョイ a310-m0Pc)
垢版 |
2022/11/19(土) 02:29:57.55ID:UCCiArGZ0
ruby信者が荒らすから
0107デフォルトの名無しさん (アウアウエー Sa3a-iKek)
垢版 |
2022/11/19(土) 18:19:31.17ID:IQRl98lga
GetOpenFilenameで開いたファイルのパスを返すFunctionを作ったのですが、戻り値を変数として利用する度にGetOpenFilenameメソッドが実行されてダイアログが開きます
初回のみダイアログを開くFunctionは作れないもんですかねえ
代替案としてSubプロシ=[ジャとして呼bム出して取得しbスファイルパスbublic変数に試めているのでbキがPublic変数bgうのはなんbゥ気持ち悪くて=c…
0112デフォルトの名無しさん (スッップ Sd02-TaOI)
垢版 |
2022/11/19(土) 22:10:17.78ID:oLScpTixd
>>107
コードも見てないから何とも言えないけど
初回のみって判定なら基本的に変数で管理するしかないと思うけどね
それとGetOpenFilenameがダイアログでファイル名(ファイルパス)を取得するための関数なら関数自体は何もせずに
GetOpenFilenameを2回目以降に呼ばないような変数管理が普通の方法じゃないかと思うよ

publicが気持ち悪いってのは関数や変数のスコープ管理がおかしいからだと思うから
それはそれで見直せばいいのでは
0113デフォルトの名無しさん (ワッチョイ 5f01-rxZH)
垢版 |
2022/11/19(土) 22:13:03.43ID:6K02rf2Z0
>>107
それってsubの中で
cells(1,1)=Function変数
cells(2,1)=Function変数
ってやってるからでしょ?
subの中でtempでも宣言して
temp=Function変数
cells(1,1)=temp
cells(2,1)=temp
ってやればいいんじゃない?
0115デフォルトの名無しさん (スップ Sd22-P3Qh)
垢版 |
2022/11/19(土) 23:29:30.05ID:WhIdqCT2d
>>107
こういう馬鹿が来るから荒れる
0117デフォルトの名無しさん (スププ Sd02-QpwG)
垢版 |
2022/11/20(日) 07:09:50.84ID:LWJSK1yhd
自分でそこんところをいろいろ考えてやるのが楽しいのに
どうにでもなるようなことを聞いてる人ってプログラミング=苦痛と感じてるひとなんだろうなぁって思うわ
まぁそれならそれで仕方ないけど
0119デフォルトの名無しさん (ブーイモ MMdb-EUya)
垢版 |
2022/11/20(日) 08:12:58.99ID:U8ZuobNzM
と、荒しが申しております。
0120デフォルトの名無しさん (ミカカウィ FFeb-LEwT)
垢版 |
2022/11/20(日) 09:58:37.83ID:BaPmF74HF
>>108
こんな感じです。

Public Function OpenedFilePath() As Variant
OpenedFilePath = Application.GetOpenFilename(FileFilter:="ExcelファイルおよびCSVファイル,*.xls*;*.csv")
If OpenedFilePath = False Then
MsgBox "ファイルが選択されませんでした。"
Exit Function
End If
Dim OpenedFileName As String
OpenedFileName = Dir(OpenedFilePath)
Dim Wb As Workbook
For Each Wb In Workbooks
If Wb.Name = OpenedFileName Then
MsgBox "選択したファイルは既に開かれています。ファイルを閉じてやり直してください。"
OpenedFilePath = False
Exit Function
End If
Next Wb
Workbooks.Open OpenedFileName, UpdateLinks:=0
End Function

Function変数「OpenedFilePath」をメインのプロシージャで何度か呼び出すのですが、
そのたびにダイヤログが開くんですよね(まあ当たり前なんですけど)。
やっぱり「OpenedFilePath」をメインのプロシージャの方でローカル変数に格納するしかないですかね。
0122デフォルトの名無しさん (ワッチョイ 4b5f-stRS)
垢版 |
2022/11/20(日) 10:21:57.15ID:ZntJwwMB0
特に理由がない限り1つのプロシージャの機能はなるべく1つに限定したほうがいい
短期的に問題無くても後々機能を使いまわしたくなった時に利便性が悪い
0123デフォルトの名無しさん (ワッチョイ e201-IwB9)
垢版 |
2022/11/20(日) 10:25:11.24ID:AxU0uBeT0
>>120
まず「Function変数」なんオレオレ用語は止めなよ、余計混乱する

> Function変数「OpenedFilePath」をメインのプロシージャで何度か呼び出すのですが、
それ何のために呼び出してるんだ?
そもそも関数内でブックをオープンするならオープンしたブックを返してメイン側ではそのブックを使えばいいだけな気がするが...

Public Sub Main()
Dim Book As WorkBook
Set Book = OpenedFilePath()
...
End Sub
Public Function OpenedFilePath() As WorkBook
Dim Path As Variant
Path = Application.GetOpenFilename(FileFilter:="ExcelファイルおよびCSVファイル,*.xls*;*.csv")
If Path = False Then
MsgBox "ファイルが選択されませんでした。"
Set OpenedFilePath = Nothing
Exit Function
End If
Dim OpenedFileName As String
OpenedFileName = Dir(Path)
Dim Wb As Workbook
For Each Wb In Workbooks
If Wb.Name = OpenedFileName Then
MsgBox "選択したファイルは既に開かれています。ファイルを閉じてやり直してください。"
Set OpenedFilePath = Nothing
Exit Function
End If
Next Wb
Set OpenedFilePath = Workbooks.Open(OpenedFileName, UpdateLinks:=0)
End Function
0126デフォルトの名無しさん (JP 0Hfe-stRS)
垢版 |
2022/11/20(日) 10:58:27.47ID:j5HG04Q5H
なんでstaticが出てこないんだよwww

Public Function OpenedFilePath() As String

'引数がtrueなら必ずダイアログを開くっての実装しようとおもったけどやめた

'OpenedFilePathは空白かどうかだけで判定。staticで変数を宣言
Static path

'空白じゃなければ終了
If (path <> "") Then
Exit Function
End If

'本体
path = Application.GetOpenFilename(FileFilter:="ExcelファイルおよびCSVファイル,*.xls*;*.csv")

'開かなかったら終了
If OpenedFilePath = "False" Then
OpenedFilePath = ""
MsgBox "ファイルが選択されませんでした。"
Exit Function
End If

End Function
0129デフォルトの名無しさん (JP 0Hfe-stRS)
垢版 |
2022/11/20(日) 11:44:28.04ID:j5HG04Q5H
>>127
うわ、ずっと間違えてた。これは申し訳ない

言い訳すると、pathをstringで宣言してる時、booleanのfalseが"false"に変換される
これがあってからずっと文字列が返ってきてると思いこんでいた
これは本当に申し訳ない、間違った情報でドヤッてしまった

Sub foo()
Dim path As String
path = Application.GetOpenFilename()
Debug.Print TypeName(path)
End Sub

>>128
わかる
0130デフォルトの名無しさん (スッップ Sd02-TaOI)
垢版 |
2022/11/20(日) 12:28:19.61ID:28UXg9Drd
「Workbooks.Open」のようなコードだけだとActiveBookが変わって
本来操作したいブック以外を参照してしまう事故を防ぐためにも
自分も>>123のようなコードがいいと思うな
あとはVariantはなんにでも使えてしまうから戻り値もWorkbookがいいと思うけど
private変数で宣言するならファンクションである必要もなくなりそうではあるんだが
それは前後の流れ次第かね
0131デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/20(日) 15:20:20.30ID:BdLJ6aAN0
>>117
楽しい・・・?
そうだね、VBAは弄ってて楽しい言語だね。
何でもお手軽に作れるしグラフィカルな部分が多いから
分かりやすいし。

お手軽と言えばJavaScript もそうかな。
逆にCOBOLとか何が楽しいのか俺には理解出来ない。
0132デフォルトの名無しさん (ワッチョイ 5701-kfYZ)
垢版 |
2022/11/20(日) 15:36:16.68ID:CFvDfimk0
おっちゃんが理解できるようにしてやろうか?
0133デフォルトの名無しさん (ワッチョイ c28b-TaOI)
垢版 |
2022/11/20(日) 21:15:15.16ID:79zBHkdo0
>>100
ありがとうございます。

Dim Driver As New Selenium.WebDriver

Driver.AddArgument "credentials_enable_service=False"
Driver.AddArgument "profile.password_manager_enabled=False"

「パスワードを保存しますか?」というダイアログが表示されてしまいます。

このダイアログが邪魔でしょうがないです。
何とか消したいのですが、コード間違っていますか?
0134デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/20(日) 21:44:52.90ID:XCN8LgbG0
Driver.SetPreference "credentials_enable_service", False
こうじゃない?
0135デフォルトの名無しさん (ワッチョイ c28b-TaOI)
垢版 |
2022/11/20(日) 22:06:06.02ID:79zBHkdo0
>>134
これも試しましたが、ダイアログが起動します、、、
うーん、困りました。
With Driver
.SetPreference "credentials_enable_service", False
.SetPreference "password_manager_enabled", False
.SetPreference "--password-store", basic
0138デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/20(日) 22:25:06.89ID:XCN8LgbG0
>>135
ソースコード全部見せて
0140デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/20(日) 22:44:18.63ID:XCN8LgbG0
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
prefs.put("profile.password_manager_enabled", false);
options.setExperimentalOption("prefs", prefs);

Javaだとこうだから

Driver.SetPreference "prefs", ...

にしないといけないのかも
0141デフォルトの名無しさん (ワッチョイ c28b-TaOI)
垢版 |
2022/11/20(日) 22:46:06.24ID:79zBHkdo0
>>138
色々と試しましたが、全部ダイアログが出ます、、、

Dim Driver As New Selenium.WebDriver

'パスワードを保存しますか?ダイアログを消す。(消えない)
'Driver.SetCapability "credentials_enable_service", "False"
'Driver.SetCapability "profile.password_manager_enabled", "False"

'Driver.AddArgument "credentials_enable_service=False"
'Driver.AddArgument "profile.password_manager_enabled=False"

With Driver
'.SetPreference "credentials_enable_service", False
'.SetPreference "password_manager_enabled", False
'.SetPreference "--password-store", basic
.Start "chrome"
.Get "https://hogehoge.com/";
End With


'ID
Driver.FindElementById("UserID").SendKeys "IDhoge"

'ID
Driver.FindElementById("UserPASS").SendKeys "PASShoge"


'ログインボタンをクリック
Driver.FindElementById("id_login_button").Click
0142デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/20(日) 23:19:33.15ID:XCN8LgbG0
Dim prefs
Set prefs = CreateObject("Selenium.Dictionary")
prefs("credentials_enable_service") = False
prefs("profile.password_manager_enabled") = False

driver.SetPreference "prefs", prefs

これでどう?
0144デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/21(月) 00:00:32.12ID:pQOpt44b0
driver.SetPreference "credentials_enable_service", False

Dim profile
Set profile = CreateObject("Selenium.Dictionary")
profile("password_manager_enabled") = False

driver.SetPreference "profile", profile

これでどう?
0145デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/21(月) 00:11:55.56ID:pQOpt44b0
Driver.SetPreference "credentials_enable_service", False
Driver.SetPreference "profile.password_manager_enabled", False

これでできそうな気がする
0147デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/21(月) 00:42:53.42ID:pQOpt44b0
Driver.AddArgument "--password-store=basic"
Driver.SetPreference "credentials_enable_service", False
Driver.SetPreference "profile.password_manager_enabled", False
これでどう?
0149デフォルトの名無しさん (ワッチョイ c3ce-zHbW)
垢版 |
2022/11/21(月) 08:04:05.28ID:GlEj3eeB0
>>148
結果的に消えるならいいじゃん
そこでボタンをクリックしないと動作が止まる、とかだったら困るけど、動けばいいんだよ

てか、オプション設定のタイミングが悪いんじゃないの?Chromeを起動する前に設定してる?
0151デフォルトの名無しさん (スップ Sd22-P3Qh)
垢版 |
2022/11/21(月) 17:38:44.89ID:oUN57f6ld
>>133
マルチポスト、更に言語の違いすらわからない馬鹿は消えろ
0153デフォルトの名無しさん (ワッチョイ 0e8c-7Q5q)
垢版 |
2022/11/21(月) 23:00:46.16ID:qzpyBUkr0
https://xtech.nikkei.com/atcl/nxt/column/18/02246/110200002/
https://cdn-xtech.nikkei.com/atcl/nxt/column/18/02246/110200002/ph1.jpg
利用しているプログラミング言語
「あなたが現在使っているプログラミング言語は何ですか」という設問に対する回答の内訳。
最大3つ選択してもらった。回答数が10以上の言語を掲載

VBA頑張ってるじゃん
Rubyの倍やん
0155デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/21(月) 23:12:28.50ID:+rhbDZE90
>>153
これは結構意外な結果。
HTMLとCSSが思ったより低いね。
もっと意外だったのがSQLがランクインしていないこと。
「SQLはプログラミング言語じゃねーだろ」という意見も聞こえそうだけど、
それ言ったらHTMLだってプログラミング言語かと言えば怪しいよね。

iPhoneを開発するOvjective-C辺りはCに含まれるのかな?
でもそう考えるとSwift もランクインされていない。
最近はPython が主流なのかー。
まぁRubyはさして知るべし。
0157デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/21(月) 23:28:16.93ID:+rhbDZE90
よく見るとTypeScriptが追い上げてるなぁ
Web版EXCEL開発しなきゃいけなくなったとき用に少し勉強しておくかな
0158デフォルトの名無しさん (スップ Sd22-P3Qh)
垢版 |
2022/11/22(火) 00:17:55.04ID:z+hPxvMVd
>>153
rubyは毎年順位を落としている
0162デフォルトの名無しさん (JP 0Hfe-stRS)
垢版 |
2022/11/22(火) 08:25:23.22ID:jrlVPdOBH
>>159
アホが書いたぐちゃぐちゃインデント見た事ないっしょ

インデントがそのまま機能に繋がるってのは、
もうこれだけでいいんじゃないかってぐらい見やすいんだよ
0164デフォルトの名無しさん (ワッチョイ 8bad-nHGa)
垢版 |
2022/11/22(火) 10:15:24.80ID:YR0FNqFN0
VBAでフォームからセルに入力できるフォームを作るときにテキストボックスとセルをcontrolsauceで連結するのが一般的ですか?
今まで、読みとりボタンで、テキストボックス1=セルの値、更新ボタンで、セルの値=テキストボックス1としてたのですが、controlsauceを使った方がよいのか悩んでます
0168デフォルトの名無しさん (オッペケ Srdf-qU2U)
垢版 |
2022/11/22(火) 12:11:04.68ID:KOo0nK71r
歪というか、アンケートの対象はプログラマーのみではなさそうだな
プログラマーなんて社会人の一部だし

この手のはなんかの指標として使えるものではないと自分は思ってる
0171デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/22(火) 13:50:49.13ID:gWTAVy/70
VB.Netは確かにもうMicrosoft からも.NetCoreでは更新しませんよって宣言されてた気もするし、
終わった言語と言えばそうなのかもね。

ま、でも文法こそ違うものの、中身はC#と大して変わらないから、
やるならC#でいいよ。

C#とVBA覚えておけば必然的にVB.Netも書けると思う。
0173デフォルトの名無しさん (ワッチョイ 4ead-+H9L)
垢版 |
2022/11/22(火) 14:54:19.77ID:0MFmILJN0
そうだな、ぜんぜん違うけどな
0174デフォルトの名無しさん (ワッチョイ ef4f-95HW)
垢版 |
2022/11/22(火) 15:48:12.92ID:p3XTSB6d0
VBA は社員が使っている。一般人・アマチュア。
Linux, Docker, Heroku, AWS などを知っているはずがない。
Windows しか出来ない香具師

一方、Ruby on Rails は、ウェブ開発のプロ用。
ポートフォリオにも使う転職用だから、一般人よりも少なくなる

VBAが出来ても、プロとしては転職できない。
VBAが出来るから、モダンなウェブ開発企業が採用するとは思わない
0175デフォルトの名無しさん (ワッチョイ ef8e-P3Qh)
垢版 |
2022/11/22(火) 15:57:35.32ID:ntrRKrLv0
>>169
Pythonにあっという間に追い越され凋落が加速しているRubyざまあ
0177デフォルトの名無しさん (ワッチョイ ef8e-P3Qh)
垢版 |
2022/11/22(火) 16:04:23.96ID:ntrRKrLv0
>>174
プロ用wwwwww
つまり金貰えなきゃRubyなんて使わんわ!ということ
0179デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/22(火) 18:45:18.15ID:gWTAVy/70
あー、まぁ旧VB6ならそうかもね
VB.Netは完全にObject指向言語だから
そこからVBAやるってのはキツいんじゃないかな?
まぁその逆はもっとキツいと思うけど
0182デフォルトの名無しさん (アウアウエー Sa3a-iKek)
垢版 |
2022/11/22(火) 21:05:06.99ID:X8yFxH5Ua
ネットでサンプルコードを漁っていると配列の型を宣言するときに括弧を省いているのが多いけれどなんでだろう
Dim Array As variant
Array = Range(“A1:C10”)
とか
Dim Array as Variant
Array = TempArray
みたいに

括弧無しの方が処理が早いのだろうか
そもそも括弧有り無しの違いってなんなんだろう
0183デフォルトの名無しさん (JP 0Hfe-stRS)
垢版 |
2022/11/22(火) 21:39:01.76ID:jrlVPdOBH
>>182
vbaの配列、特に静的配列はカスって事を念頭においておいてほしい。
他の言語はここまでめんどくさくない

静的配列は要素数が決まっていて拡張性が無い。
Dim array_a(5) As Long

動的配列は要素数を変動させることができるがめんどくさい
Dim array_a() As Long

これは配列をvariant型の変数に入れてるだけで、配列の型とは関係がない
Dim array_b As Variant
array_b = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
array_b = Array(1, 2, 3, 4, 5, 6)

どれが良いかというと、variantに入れておけば大体うまくいく
動的配列や静的配列を使うのもいいけど、めんどくさいだけだよ
0184デフォルトの名無しさん (ワッチョイ 3b68-KP+k)
垢版 |
2022/11/22(火) 22:02:02.71ID:hcZiH6eO0
sub hoge
 for i=1 to10
  if i=5 then exit sub
 next
end sub

サブルーチンのforとかloop中に
判定文でexit forどころか、exit subするのって、マズいんですかね?

メモリ喰っちゃう?
0186デフォルトの名無しさん (アウアウエー Sa3a-iKek)
垢版 |
2022/11/22(火) 22:18:04.27ID:X8yFxH5Ua
>>183
ループを使って配列の要素を一つずつ埋めて行く場合は()付きで配列として宣言しなきゃダメじゃん?
だったら一括代入する場合も()付きで配列として宣言した方がわかりやすいかなあと思うんだよね
0187デフォルトの名無しさん (JP 0Hfe-stRS)
垢版 |
2022/11/22(火) 22:24:40.04ID:jrlVPdOBH
>>184
特にマズくない
最近は8GBぐらいメモリあるんだし多少食っても全然平気

>>186
vba結構長いこと使ってきたけど、そんなコード書いたことないなぁ
ちょっと分からないわ
0188デフォルトの名無しさん (アウアウエー Sa3a-LEwT)
垢版 |
2022/11/22(火) 22:47:31.59ID:X8yFxH5Ua
>>187
たとえば「シートの表を一旦二次元配列に格納して不要な行を取り除いてからシートに転記する」ってコードの場合、次のようになるでしょ?

Dim RawArr As variant
RawArr = Range("A1:E100").Value

Dim EditArr() As Variant
Redim EditArr(1 to Ubound(RawArr ,1), 1 to Ubound(RawArr ,2))
'↑これは括弧付きで配列として宣言しなければならない

Dim R as Long, C As Long, Rcount As Long
Rcount = 1
For R = 1 to Ubound(RawArr ,1)
If Not RawArr(R, 1) = "不要" Then
Rcount = Rcount +1
For C = 1 to Ubound(RawArr ,2)
EditArr(Rcount, C) = RawArr(R, C)
Next C
End If
Next R

Range("A1:E100").Value = EditArr

このコードにおいて「EditArr」を括弧付きで配列として宣言するならば「RawArr」もそれに準じた方がわかりやすいのではと思うんだよね
超細かくて申し訳ないけれど
0190デフォルトの名無しさん (ワッチョイ 622f-ES6F)
垢版 |
2022/11/23(水) 00:24:02.68ID:6lN/+0f80
>>188
これってのが
Dim EditArr() As Variant
なら、
Dim EditArr As Variant
でも動いてるようだが?
そのまま走らせたら両方ともそこ以外で実行時エラー出てるけど

さらに言えば、ReDimするなら(Option Explicit onでも)Dimすらなくても動いたような
0191デフォルトの名無しさん (オッペケ Srdf-rxZH)
垢版 |
2022/11/23(水) 03:52:19.28ID:uIyZhPcqr
>>188
俺も>>190と同じく
Dim EditArr() As Variant
Redim EditArr(1 to Ubound(RawArr ,1), 1 to Ubound(RawArr ,2))
だろうが
Dim EditArr As Variant
Redim EditArr(1 to Ubound(RawArr ,1), 1 to Ubound(RawArr ,2))
だろうが同じって認識だわ
動的配列っていうのをわかりやすくするために()つけておくか、くらいの感じだと思ってる
0192デフォルトの名無しさん (ワッチョイ e219-6GUG)
垢版 |
2022/11/23(水) 08:25:42.71ID:/bpEmzEb0
>>184
別にマズくはないよ。
メモリ使ってたとしても使ってる変数が
みんなPrivateのものなら関数抜けた時点で解放されるし
0193デフォルトの名無しさん (ワッチョイ c329-AJfA)
垢版 |
2022/11/23(水) 17:09:12.41ID:yNj03cHV0
【速報】上司「お前のことはExcelの印刷くらい信用している」→パワハラ

 広告代理店・電報堂(本社・東京都足立区)に勤務する50代の部長が20代の部下にパワハラを繰り返し、
部下をうつによる休職に追い込んだとして民事訴訟を起こされていたことが22日分かった。
 訴状によると部長は部下に対し日頃から「お前のことはExcelの印刷と同じくらい信用している」
という発言を繰り返しており、その結果「どれだけ仕事をしても信用が得られない」
と感じた部下は今年5月からうつの症状を発症するようになり、現在は休職しているという。
 なお上司は取材に対し「信用していると言っただけなのになぜパワハラ扱いされるのか理解できない」
と述べた。

https://kizuna.5ch.net/test/read.cgi/curry/1663509806/
0194デフォルトの名無しさん (ワッチョイ e201-IwB9)
垢版 |
2022/11/23(水) 17:31:53.36ID:g5bfG+kA0
まあ言い方だろうな
Excelの印刷はたまに端や上下が切れたりするけどちゃんと手当てしてやればそこそこ使える
ワードなんかと違ってレイアウトを崩さずにページに収めるとか使える機能もあるしな
0207デフォルトの名無しさん (ワッチョイ ffda-emCW)
垢版 |
2022/11/30(水) 08:01:42.75ID:wuoQBUdg0
スタンフォード監獄実験で普通の人でもそういう仕事につくと凶暴になる実験あったな
0211デフォルトの名無しさん (アウアウウー Sa5b-qzZ5)
垢版 |
2022/12/02(金) 09:43:13.76ID:YgL2+bOja
>>209
作る意味ないので別関数で呼び出せ
0215デフォルトの名無しさん (JP 0Hcf-Z2Iz)
垢版 |
2022/12/02(金) 11:44:11.14ID:aS3/tvEuH
他の言語でやってるとね~やっぱ欲しいなって思う場面が出てくるんだよね~
別にテクニカルな事をしたいわけじゃないのよ~
0222デフォルトの名無しさん (ワッチョイ 7df0-7kHv)
垢版 |
2022/12/03(土) 10:30:49.38ID:S7dtgmin0
神様達、よろしくお願いします
classモジュール変数に、public で配列を置きたいのですが
配列は、オブジェクトモジュールのパブリックメンバーとして利用できません
と怒られました

クラスをnewして、メンバーとして配列にアクセスする方法はありませんか?

例)=================================
標準モジュール
dim cls as Class1
set cls = new Class1

debug.print(cls.ar(0)) <---こう呼び出したい

=============================
クラスモジュール

public ar() as variant

private sub Class_Inisialize()
ar(0)="xxx"
end sub
0224デフォルトの名無しさん (ワッチョイ d010-vo7k)
垢版 |
2022/12/03(土) 10:52:40.84ID:sKNlSpsi0
>>218
出来ないことはないが
VBAでは過去の遺物、負の遺産として
使用が暗黙的に禁止されている。
どうしても使いたければ
VBA GOSUBでググれ
0231デフォルトの名無しさん (スップ Sdc4-4FAg)
垢版 |
2022/12/03(土) 14:08:18.64ID:pfZ7JepId
GOSUBでも似たようなことできるけど○○できないとか制限あるよっていえばいいのに
最初の4行なんて余計でしょもったいぶって言う割には回答がおかしすぎて
マウントとかそういうレベルでもない
0234デフォルトの名無しさん (JP 0H06-g9pY)
垢版 |
2022/12/03(土) 14:26:56.17ID:y5TLnC6XH
>>232
君、韓国人みたいな発言してるよ
気をつけたほうが良いと思う
0236デフォルトの名無しさん (アウアウウー Sa3a-zfUU)
垢版 |
2022/12/03(土) 14:59:55.68ID:YYHySLTHa
質問者はなんで出来ると思って質問したのか?
0237222 (ワッチョイ 7df0-7kHv)
垢版 |
2022/12/03(土) 15:06:08.67ID:S7dtgmin0
アドバイス頂けただけありがたいです。
神様皆様ありがとうございます

マクロの記録なのですが、

マクロ記録→検索→全部→マクロ記録終了
そしてマクロを選択して編集すると
Macro
と書かれているだけでマクロが記録できません
記録してどんなワークシート関数を使っているのかみたいのですが
何か必要な設定があるのでしょうか?
現在excel2019を使っています
0238222 (ワッチョイ 7df0-7kHv)
垢版 |
2022/12/03(土) 15:11:13.12ID:S7dtgmin0
>>236

class.propertyみたいな呼び出し方で
配列や、インスタンス代入変数を参照できたらいいなって思ったんです
function やsubを直接参照するのが気持ちよくなくて
0241デフォルトの名無しさん (ワッチョイ c001-g9pY)
垢版 |
2022/12/03(土) 17:35:51.41ID:su8PlnK50
>>235
それ、朝鮮総連のマニュアルだよ。
「あなたは朝鮮人の可能性があると言って相手の反応を見ましょう」
0243デフォルトの名無しさん (スップ Sdc4-4FAg)
垢版 |
2022/12/03(土) 18:30:19.13ID:pfZ7JepId
>>232
回答もできず
できることで負けてるから若さで勝ち誇りたいプライドもかわいそうだな
そのまま年取るなよ

>>242
ある程度まとまったコードを例えば分岐のいくつかでやりたいとかの場合は有効かもしれんけどね
0244デフォルトの名無しさん (ワッチョイ 6eda-k08R)
垢版 |
2022/12/03(土) 19:16:17.53ID:lRZF9sqh0
>>238
Class内にDictionaryなりCollectionなりをSetしておいてItemをため込み、
Property Getで取得することはできそうな気がする。。。

ごめん、検証してないし希望とは違うかもしれんけど。
0245デフォルトの名無しさん (アウアウエー Sa6a-M9qo)
垢版 |
2022/12/03(土) 22:12:00.65ID:K9qqP04ra
複数行にまとめてVLOOKUP関数を埋め込みたいのでFormulaR1C1プロパティを使っているのですが、マジックナンバーを避けるために検索範囲や列番号を変数で表現すると一行がやたら長くなってしまいます
出来るだけ簡潔に書きたいのですが、何かいい方法はありませんかねえ
0248デフォルトの名無しさん (ワッチョイ 6eda-RX5i)
垢版 |
2022/12/04(日) 05:27:51.07ID:c2Va4wZ/0
>>245
長くなるというのがどういう状況かわからんけど、範囲をテーブル化して
構造化参照するとかListobjectで指定するとかは?
0250デフォルトの名無しさん (ワッチョイ 6eda-RX5i)
垢版 |
2022/12/04(日) 07:20:23.13ID:c2Va4wZ/0
>>249
あーテーブル嫌がる人けっこう多いよねーw
>>245の件としてレスするけど、テーブル書式設定をクリアしてテーブルっぽく見せないってごまかしは置いてくとしてw
変数って書いてるからVBAコード内での一行なのだろうと仮定して、変数にすると長くなるのであれば変数名を短くするしかないかと。
多少なりともわかりやすくというなら列番号はEnum定義しておくとか。そのくらいかな。
的外れなレスだったらごめんね。
0251デフォルトの名無しさん (ワッチョイ 245f-obKj)
垢版 |
2022/12/04(日) 07:55:31.27ID:CPo+UFwT0
構造化参照も理解できない方たちが事務やってるの多いもんな

変数てLET関数のことかな
VBAの変数名の付け方が参考になるんじゃないか
むしろVBAだと変数名は少し長くなっても後から理解できるようにしておくというのが多いけど
0252デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/04(日) 08:09:42.33ID:TGszPi/mH
>>240
新旧の互換性を維持する系の言語は
いろいろ個性が強くなりますので
できないことはできないで教えていただけてすっきりです

>>244
アドバイスありがとうございます
クラスモジュール内のプロシージャーをすべてprivateにして
各プロシージャーの処理結果をモジュール変数の参照のようにしたいのです
そうすれば多少は依存性が解消できて見通しよくなるような気がしてます
何かいい方法ないでしょうか?
0255デフォルトの名無しさん (ワッチョイ 73da-9BiN)
垢版 |
2022/12/04(日) 12:51:49.12ID:SnW1Fv340
嫌いどころかデータ蓄積の入力用シートすら作ってない不思議な人達ばかりよ現場は。
ひとつの表で完結させようとしている。

良くそれで仕事を完遂できるなと
0256デフォルトの名無しさん (ワッチョイ e23e-YDcJ)
垢版 |
2022/12/04(日) 13:25:18.39ID:pUfIiilw0
すみません
凄く基本的なマクロの質問になると思いますが質問させてください
シート2のA2からA列の最終行までの値をコピーして
シート1のB3に貼り付けをしたいのですがどうしたらいいでしょうか?
範囲を最終行に応じて自動的に変化させたいです

他にもB2から最終行まで、D3から最終行までとするにはどうしたら良いでしょうか?
0257デフォルトの名無しさん (ワッチョイ aa19-vo7k)
垢版 |
2022/12/04(日) 14:09:55.48ID:5CZT7HJs0
>>252
クラス内のプロシージャを全てPrivateにして外部のモジュールから参照するのはしようと思えば出来る。
0259デフォルトの名無しさん (スップ Sdc4-4FAg)
垢版 |
2022/12/04(日) 15:39:27.71ID:E+FYkBejd
>>256
クリップボード経由しないならこんな感じじゃない
Dim iLastRow As Long
iLastRow = Worksheets("Sheet2").Range("A1").SpecialCells(xlLastCell).Row
Worksheets("Sheet1").Range("B1:B" & CStr(iRow - 1)).Value = Worksheets("Sheet2").Range("A2:A" & CStr(iLastRow)).Value
ちなみに代入元と代入先の行数を合わせる必要があるからそこは必要に応じて書き換えてね
0260デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/04(日) 15:42:10.01ID:TGszPi/mH
>>257

dim cls as class1
set cls =new class1

cls.arry(0)
cls.dictionary("x")

みたいなことできますか?
プログラムはかなりできあがってきたんですが
出来るようなら書き換えたいです
0261デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/04(日) 16:08:10.76ID:TGszPi/mH
神様の皆様、よろしくお願いします
動的配列を使って要素を追加するケースで質問です

dim ar() as variant
redim ar(0)
for i=0 to 9
ar(i)=i
redim preserve ar(ubound(ar)+1)
next
redim preserve ar(ubound(ar)-1) // A

A部分はar(10)を削除しようとして記述しています
この記述は、ar配列の最終要素を削除する動作を保証しているのでしょうか?
それとも何かの影響でarの最終要素以外の要素を削除することはあるのでしょうか?
0262デフォルトの名無しさん (ワッチョイ ae4b-lCwf)
垢版 |
2022/12/04(日) 16:43:26.32ID:cmQKIRXH0
>>261
VBE上でローカルウィンドウを出してF8を繰り返し押せば確認できるよ
0264デフォルトの名無しさん (ワッチョイ e23e-YDcJ)
垢版 |
2022/12/04(日) 16:55:07.12ID:pUfIiilw0
>>258-259

ありがとうございます
凄く助かります
0265デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/04(日) 17:09:39.48ID:TGszPi/mH
>>262
>>263
ありがとうございます
例えば1万回は最終要素を削除できたけれど
10億回すると削除されない、もしくは最終要素以外を削除してしまう
という挙動はあり得ないのでしょうか?

言い換えてると
vbaの仕様として、ubound(ar)は配列の最終要素を参照しており
ubound(ar)-1は、最終要素の1つ手前を参照することを保証していると考えていいでしょうか?
0267デフォルトの名無しさん (ワッチョイ dc05-AmP8)
垢版 |
2022/12/04(日) 18:42:02.29ID:QfYm9r1x0
請求書をつくるとき取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってるんですが
これをうまい具合に自動化することはできませんか?
0269デフォルトの名無しさん (ブーイモ MMba-5Y9H)
垢版 |
2022/12/04(日) 18:57:53.90ID:k+5uNib2M
ピボットテーブルの特定セルを参照する関数なかったっけ?
0270デフォルトの名無しさん (JP 0H06-4FAg)
垢版 |
2022/12/04(日) 19:30:14.40ID:SVL4/CbaH
>>267
取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってる

請求書シートの所定の場所に、ピボットテーブルを表示させる

でいいんじゃないの?
取引先や日付範囲でフィルタすれば全自動になると思う
0275デフォルトの名無しさん (ワッチョイ dc05-AmP8)
垢版 |
2022/12/05(月) 00:46:19.76ID:TwFYHOyP0
>>272
>>273
いずれもコピーは必要なんですね
ここに貼り付ける、ときたら
勝手に集計したのを貼ってくれといいのですけど

ちなみに零細で月に10枚程度しか請求書ださないとこは
ExcelのなんちゃってDBで十分ですかね?

フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った
これとこれをグループ化とかも簡単にできないし
0276デフォルトの名無しさん (JP 0H06-4FAg)
垢版 |
2022/12/05(月) 01:25:43.19ID:vai3YpAKH
>>275
>ちなみに零細で月に10枚程度しか請求書ださないとこは
>ExcelのなんちゃってDBで十分ですかね?
じゃなくて、成長率
毎年の成長率が高い企業は、本当に気をつけたほうがいい

>フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った
Excelがおかしな事をしているだけなんだよ
それがたまたま日本の零細~中小に合致しているだけ
0279デフォルトの名無しさん (スプッッ Sd70-e7tZ)
垢版 |
2022/12/05(月) 03:27:44.54ID:FhvtASfFd
安い販売管理アプリすら買えない貧乏会社は潰れろ
0280デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/05(月) 06:57:51.15ID:/0dw54cWH
今どきはフリークラウドの管理ソフト(販売系、経理系、労務系)のサービスが山ほどあるでしょ
提供会社が無償提供やめたり、提供自体やめると面倒だけど
データ移行性を確保できるのならそっち方法がいい
0282デフォルトの名無しさん (ミカカウィ FF90-lCwf)
垢版 |
2022/12/05(月) 11:40:12.06ID:BG/y+01pF
>>246
一例をそのまま貼ると、こんな感じです。

Dim VLOOKUP商品名 As String
VLOOKUP商品名 = "=VLOOKUP(RC" & eCols_明細.得意先コード & "," & WsName得意先テーブル & "!R" & eRows_通常.開始行 & "C" & eCols_得意先テーブル.得意先コード & ":R" & EndRow得意先テーブル & "C" & eCount_得意先テーブル & "," & eCols_得意先テーブル.得意先名 & "," & 完全一致 & ")"
めちゃくちゃ長くて可読性が悪いなと……
0283デフォルトの名無しさん (スップ Sd9e-4FAg)
垢版 |
2022/12/05(月) 12:03:42.76ID:2GrVmVNid
変数に代入している際の話なら
VLOOKUP商品名 = ""
VLOOKUP商品名 = VLOOKUP商品名 & "AAA"
VLOOKUP商品名 = VLOOKUP商品名 & "BBB"
VLOOKUP商品名 = VLOOKUP商品名 & "CCC"
とかきりのいいところで分割して代入すればいいんじゃない?
0284デフォルトの名無しさん (アウアウウー Sa3a-zfUU)
垢版 |
2022/12/05(月) 12:08:08.63ID:1vq1KTlma
>>282
それ自力で展開できないようじゃやばいよ
0285デフォルトの名無しさん (アウアウクー MMd2-M9qo)
垢版 |
2022/12/05(月) 12:14:29.23ID:EBZoNox0M
>>283
一応テーブルを参照する部分(VLOOKUP関数の参照範囲の箇所)を変数に代入することで少しは可読性があがったのですが、そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ、と思いまして
>>284
「展開」とは?
0287デフォルトの名無しさん (ワッチョイ 0101-9CiQ)
垢版 |
2022/12/05(月) 18:30:47.05ID:ovLbu+Xd0
>>285
「そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ」ってのがよくわからん
どんな機能を使おうが、セルに代入したいなら必ず一度はコードに記載しなきゃいけないんだから「eCols_明細.得意先コード」とかの変数名を短くするくらいしかないでしょ
0288デフォルトの名無しさん (ワッチョイ 6eda-RX5i)
垢版 |
2022/12/05(月) 20:42:26.49ID:vfUaA4330
>>282
VBAからvlookup関数を埋め込んだことが無いので処理のイメージがつかめないんだけど、
今やろうとしていることはvlookup関数の字面を文字列を繋げて作り上げようとしてる感じなのかな?

そもそもVlookup関数の構文は VLOOKUP(検索値, 範囲, 列番号, 検索の型)なのだから変数を使うのであれば
検索値や範囲を変数に格納して繋げれば良いのでは? 例えば,,,

Dim val as String: val="値"
Dim rng as Range: set rng = range(”A1”,"B10")
Dim col as long: col = 2
Dim FormulaStr as string

FormulaStr = "=VLOOKUP(" & val & "," & rng.Address & "," & col & ", false)"

みたいな感じ? 値や範囲をセルによって可変にしたいなら変数に格納する値を変えればいいわけだし。。。
こういうことじゃないのかな?
0290デフォルトの名無しさん (ワッチョイ 6eda-RX5i)
垢版 |
2022/12/05(月) 21:46:02.27ID:vfUaA4330
>>289
そうですねぇ、あんまりないですね。
経験としては、計算式があるのにどうしても直打ちされて消されてしまうシートに
ボタン一発で計算式を復旧させる機能を付けた時くらいですかねw
0293デフォルトの名無しさん (ワッチョイ 6eda-RX5i)
垢版 |
2022/12/06(火) 05:54:39.62ID:iYcy7y+Q0
>>291
Excelに備わっている関数は強力だと思うし使い勝手が良かったりするものもありますね。
私の場合はcountifやmatch、max、minあたりはVBA上でもWorksheetfunctionからよく使います。
0296デフォルトの名無しさん (オッペケ Src1-9CiQ)
垢版 |
2022/12/06(火) 08:29:25.79ID:AKPIYKETr
関数を直接入力するとその後にシートに何かしら入力するたびに再計算されるから面倒だわ
その再計算が気にならないってんならvbaで処理しても気にならないレベルでしょ
countifなんか特に再計算に3分とかかかる場合もあるし
0298デフォルトの名無しさん (オッペケ Src1-9CiQ)
垢版 |
2022/12/06(火) 11:03:13.75ID:jhjyA+WOr
>>297
意味が分かりにくくてすまん
だから関数を直接セルに入力するようなことはせずに、vbaでworksheetFunctionとかDictionaryとか使って結果だけを出力するなって意味
vbaで関数を入力するのは引き継ぎとか他人に渡すのを想定したときくらいかな
0302デフォルトの名無しさん (ブーイモ MMba-5Y9H)
垢版 |
2022/12/06(火) 13:35:48.17ID:41AW+NFUM
>>301
お馬鹿自慢要らない
0303デフォルトの名無しさん (ワッチョイ 2cda-WJTY)
垢版 |
2022/12/06(火) 18:35:08.85ID:+0skKz+k0
どんな機能も馬鹿には使えない
0307デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/07(水) 07:13:11.50ID:FarCeGHLH
演算処理能力、メモリ容量、基盤の伝送量と速度が大幅に向上し
組み込み関数による処理、VBA関数による処理などの差によるメモリ効率、処理速度を考えず
組み込み関数に依存しないコーディングを書けるようになった

言い換えると3行になるな
メモリ効率を悪化させてしまった
0308デフォルトの名無しさん (スップ Sd9e-4FAg)
垢版 |
2022/12/07(水) 11:24:59.17ID:D8w4iSDKd
>>304
関数が入っているセルを参照するようなコードの場合
例えばCells(4, 3)にCells(3, 3)の値を10倍するような関数が入っているとして
Cells(3, 3).Value = 40
Debug.Print Cells(4, 3).Value
とやった場合、自動になっていればCells(4, 3)は400になった値が参照できて
手動ならもともと入っている値が参照できるという状態でしょ
スペックが向上、負荷のないコードだから書かないというのは危険な考えでは
0310デフォルトの名無しさん (アウアウクー MMd2-M9qo)
垢版 |
2022/12/07(水) 12:12:32.61ID:LcpUtl7xM
配列がらみのFunctionを作ったときにメモリを空けようと「一時的な配列」を初期化しているのだけれどもしかしてあんまり意味ない?
たとえばこのように↓

Function 戻り値配列 (引数)As Variant

Dim TempArr As Variant
(……何らかの処理)

戻り値配列 = TempArr
Erase TempArr ← これ

End Function

同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう
0313デフォルトの名無しさん (ワッチョイ 7df0-7kHv)
垢版 |
2022/12/07(水) 13:54:56.12ID:wBRRjjXH0
>>312
vbaって配列の要素に変数を入れ込んでから配列を初期化すると、
要素変数への参照は切れるけれどメモリ領域は解放されないのでは?
それともvbaって配列要素への参照切れで割りあてたメモリを開放するの?
0317デフォルトの名無しさん (アウアウウー Sab5-QZbE)
垢版 |
2022/12/07(水) 18:52:51.37ID:CifLjB7Ga
>>310
> 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう
そりゃ参照を返してるだけで実体は一個しかないからRemoveAllしたら消えるよ
その後 TempDic を使わない事を明示したいなら
Set TempDic = Nothing
でもしとけばいいけどまあ関数抜けたら TempDic はなくなっちゃうんだから気にしなくていいと思うよ
0318デフォルトの名無しさん (ワッチョイ aa19-vo7k)
垢版 |
2022/12/08(木) 00:25:28.15ID:+1lRH4XG0
まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは
使い終わったらさっさと解放することに越したことはないよ。

最近当たったんだけどボタンを押して呼んだ関数の中で数万のインスタンスを生成する処理があって、
完了メッセージを出した後もその関数抜けるときにメモリを解放しているもんだから暫く待たされるという残念なコードを見てる。

生成した後のごちゃごちゃした処理は別関数でやってたのに実に残念なツールになってたよ。
0321デフォルトの名無しさん (ワッチョイ aa01-QZbE)
垢版 |
2022/12/08(木) 06:20:02.03ID:lmp5fbT90
>>318
> まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは
> 使い終わったらさっさと解放することに越したことはないよ。
呼び出し元に返す話に何を言ってるんだ?
0324デフォルトの名無しさん (ワッチョイ aa19-vo7k)
垢版 |
2022/12/08(木) 08:07:05.00ID:+1lRH4XG0
>>322
例えば配列にループしてインスタンスを設定するとして、そのループの中でひとつの変数にNewしてインスタンスを作成して、
そのインスタンスを配列に設定した場合、前回のループで設定したインスタンスは配列の内容が削除されれば、他に参照しているところがない限りメモリから解放されるよ。
0330デフォルトの名無しさん (ワッチョイ aa19-vo7k)
垢版 |
2022/12/08(木) 12:32:14.89ID:+1lRH4XG0
>>326
それは済まなかった
でもそんなにイライラするなよ
ハゲが止まらなくばるぞ
0331326 (ワッチョイ 7274-JnHA)
垢版 |
2022/12/08(木) 14:20:26.49ID:65k1Y+1Y0
>>330
いやわたしはハゲちゃおらんよ。
君みたいなハーゲマンと一緒にしないでくれ。
0333デフォルトの名無しさん (ワッチョイ 70da-sbuD)
垢版 |
2022/12/09(金) 01:27:21.92ID:hGMGk7SH0
クエリA
UNION ALL
クエリB
→文字化け

クエリB
UNION ALL
クエリA
→正常

なんでやねん!
何で上下入れ替えると直る?
因みに、文字化けする方も文字列型にすると化けないので、
文字コードの問題ではない。
0334デフォルトの名無しさん (アウアウウー Sa3a-zfUU)
垢版 |
2022/12/09(金) 02:00:05.39ID:6OFfyKzYa
コードだせよ
0336デフォルトの名無しさん (ワッチョイ 0a19-vo7k)
垢版 |
2022/12/09(金) 04:09:12.16ID:u4+GnlEA0
>>333
何に大してSQL投げてる?
0337デフォルトの名無しさん (JP 0H88-7kHv)
垢版 |
2022/12/09(金) 07:02:42.07ID:KfOH1QpXH
神様皆様おはようございます
神様たちのお導きで50万行*80列のデータから
所望のデータを抽出できました
ありがとうございました!
0340デフォルトの名無しさん (ワッチョイ bf19-TX1J)
垢版 |
2022/12/10(土) 07:54:03.42ID:07zUVtVr0
>>339
SELECT句の中にアスタリスク使ってない?
UNION句で挙動がおかしくなるのはCSVファイルじゃなくてEXCELのシートにSQL投げたときに起こるのも見たことあるけど
まぁそもそもDBに投げてる訳じゃないからある程度は仕方ないってところもあるよ。

CSVファイルはUTF-8かSJISかってのもあるけど
UNION句の上下入れ替えたら直ったというのであれば今回は関係なさそうだしね。
0342デフォルトの名無しさん (アウアウウー Sa6b-UXa/)
垢版 |
2022/12/11(日) 02:50:20.80ID:z4dJXl08a
あすたのリスクに備えよう
0344デフォルトの名無しさん (ワッチョイ 87c6-BsWY)
垢版 |
2022/12/11(日) 12:55:57.38ID:GglWfKZ40
>>338
Ruby on Rails では、before_action, after_action, around_action で、コールバックできる

before_save :a, only: [:new :edit]
after_save :b, except: [:new :edit]

onlyで、new, editが呼ばれる前にだけ、aを実行する。
逆にexceptでは、new, editが呼ばれなかった後にだけ、bを実行する
0345デフォルトの名無しさん (ワッチョイ bf19-TX1J)
垢版 |
2022/12/11(日) 14:15:24.03ID:6rsOUIlG0
>>344
布教活動大変だね
0348デフォルトの名無しさん (ワッチョイ 47ba-tIJK)
垢版 |
2022/12/11(日) 23:36:23.53ID:jy7H3fIV0
サーバーにあるフォルダからPDFを検索したいのに上手くいかない
検索はかけても何もヒットしない…
どこか修正するとこありますか?
テキストボックスに入力して検索
検索結果をリストボックスに表示します

Private Sub CommandButton1_Click()
Const BASE_PATH = "\\L\設計\図面"
Dim myPath As String, myName As String
Dim FSO As Object, oFolder As Object, oSubFolder As Object, oFile As Object
On Error Resume Next
If TextBox1.Value = ""Then Exit Sub
ListBox1.Clear
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(BASE_PATH)
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
If LCase(oFile.Name) Like LCase(TextBox1.Value) &"*.pdf"Then
Debug.Print oFile.Path
myPath = oFile.ParentFolder &"\"myName = oFile.Name
ListBox1.AddItem myName
ListBox1.List(ListBox1.ListCount - 1, 1) = myPath
End If
Next
Next
Set FSO = Nothing
End Sub
0349デフォルトの名無しさん (スプッッ Sdff-BgjO)
垢版 |
2022/12/12(月) 00:49:34.01ID:GzIbQG1id
if文の文字列比較条件でワイルドカードが使えたらいいよね
0350デフォルトの名無しさん (ワッチョイ 7f8e-BgjO)
垢版 |
2022/12/12(月) 00:53:47.45ID:b3Hc3KE20
あ、vbaか
すまん
0353デフォルトの名無しさん (ワッチョイ df01-0RkQ)
垢版 |
2022/12/12(月) 05:04:18.82ID:x7256VzD0
>>348
とりあえず
For Each oFile In oSubFolder.Files
Debug.Print "Debug:" "& oFile.Name
If LCase(oFile.Name) Like LCase(TextBox1.Value) &"*.pdf"Then
としてまずファイルがあるのか確認しなよ
あとデバッグ中は
On Error Resume Next
をコメントアウトしといた方がいい
予想外のエラーを握り潰されて(当人にとっては)意味不明な挙動になることあるから
0355デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/12(月) 14:02:36.57ID:Yr5sVjH4a
請求書の原紙となるsheetをコピーして、そこに配列に格納した請求情報を貼り付けるという作業を約100回繰り返したいのですが、
①先に約100回のsheetのコピーを済ませて、生成されたsheets間をループして請求情報を貼り付ける
②sheetのコピー→請求情報の貼付けを約100回ループする
どちらの処理が早いのでしょうか
0358デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/12(月) 17:07:21.38ID:1yb84Oz2a
>>357
後にまとめて印刷して突き合わせを行うため、請求書のシートの順番を配列の要素の順番と同じようにしなければなりません
よって②の場合は、配列の値を貼り付けた後に(配列の添字が 1 から始まるため) “Copy After := Worksheets( i )” を記述することになります
つまりシートをコピーする度にシート数をループ変数から取得する処理の繰り返しになるのですが(①だと “Copy After := Worksheets( 1 )” でもよい)、それでも②の方が安定しているのでしょうか
0360デフォルトの名無しさん (ワッチョイ 7fda-UXa/)
垢版 |
2022/12/12(月) 17:26:03.86ID:8QT34TfC0
請求書ってそんな適当に作ったマクロで請求していいものなのか
0361デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/12(月) 17:30:19.83ID:1yb84Oz2a
>>360
私がマクロを作る前は手書きで請求書を書いてエクセルに抽出した請求データと目視で突合していたんですよ(現在は自作した請求書を自動発行するマクロをスピードアップを目的に改修しているところです)
そういう会社もあるんです
0363デフォルトの名無しさん (スップ Sd7f-KKgq)
垢版 |
2022/12/12(月) 18:13:02.49ID:UCyWy/zwd
ただそういうモノづくりをしてる自分からしたら
かりにある得意先の請求書のみ間違えていて修正したい場合①②どちらも最初から作り直すような感じに見えるけど
そうすると他の請求書にも影響あたえるような作りに見えるんだよね
なのでそういうのを作る場合は得意先コード的なものを最初に指定してその範囲の請求書を作る
かりに修正したい得意先があればそれだけを指定すればいいみたいな作りにするけどね
0364デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/12(月) 18:21:55.06ID:1yb84Oz2a
>>362
Worksheets.Count はなおさら遅いのではないでしょうか? シートのカウントを約100回繰り返すので
些末なこだわりと言われればそのとおりなんですが、どうせ改修するなら細かいところまでこだわった方がスッキリすると思いまして
>>363
指定した得意先の請求書のみを発行するコードも別のモジュールに書いてあります
メインは請求データの照合及び修正を行った後に約100件分をまとめて発行するフローでないと時間がかかってやってられないんです
0365デフォルトの名無しさん (スップ Sd7f-KKgq)
垢版 |
2022/12/12(月) 18:35:02.38ID:UCyWy/zwd
それならまずシートを100作るだけのコード書いて試せば済むことじゃないの?
よくわからないけど通常と指定可能な請求書作成が別のコードになってるんだとするとメンテのコストが2倍になるのかなと思わなくもないね
まあ他人の作るものだから余計なお世話だけどね
0366デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/12(月) 18:40:55.92ID:1yb84Oz2a
>>365
確かに自分で三通りの方法をテストしてみれば済む話なんですが、もしかして私が挙げた処理はよくあるパターンであって一般解が確立されているのかなと思い、質問させていただきました
0368デフォルトの名無しさん (ワッチョイ dfc7-B8iQ)
垢版 |
2022/12/13(火) 08:18:42.44ID:j7P7/vOd0
>>348
If LCase(oFile.Name) Like LCase(TextBox1.Value)&"*.pdf" Then
この部分、頭にもアスタリスクをつけてみたら?

If LCase(oFile.Name) Like “*”&LCase(TextBox1.Value)&"*.pdf" Then
0371デフォルトの名無しさん (JP 0Hcf-KKgq)
垢版 |
2022/12/13(火) 12:21:04.99ID:vd/+mp7xH
リファクタリングの基準ってどれぐらい?
さすがに30分は当然なにかしらすると思うけど、
30秒ぐらいってどうするもんだろう。頑張って最適化するか、それとも待つか
0381デフォルトの名無しさん (ワッチョイ 472b-3TNT)
垢版 |
2022/12/14(水) 17:28:34.10ID:zpvPwogV0
ソートがうまくいきません。
今まで下のコードでちゃんとソートできていたのですが、別のブックで同じコードを使ってもソートしてくれません。
原因がわかる方いらしたら教えてください。

Call Range(Cells(i, 1), Cells(i, 6)).Sort(Cells(i, 1))
0383デフォルトの名無しさん (スッップ Sdff-KKgq)
垢版 |
2022/12/14(水) 19:15:27.04ID:8W0NbET2d
戻り値が必要ない呼び出しするならcallでもいいでしょ
ただし引数指定する時にカッコでくくる必要がある
自分のところでもソートされない現象が再現するんだけど、なぜか一度ソートすると次回以降はソートされるようになるね
ちなみにこんな感じに修正すればソートされるようにならない?
Call Range(Cells(i, 1), Cells(i, 6)).Sort(key1:=Cells(i, 1), Orientation:=xlSortRows)
・「key1:=」をつける
・「, Orientation:=xlSortRows」をつける
0384デフォルトの名無しさん (ワッチョイ 472b-3TNT)
垢版 |
2022/12/14(水) 20:03:28.98ID:zpvPwogV0
>>382
このやり方で無事できました。ありがとうございました。

>>383
このやり方も試しましたが、できませんでした。
やっぱりcallは使わない方がいいんでしょうか。
拾ったコードをよくわからずに使っていました。
0387デフォルトの名無しさん (ワッチョイ 7fda-UXa/)
垢版 |
2022/12/15(木) 12:16:56.32ID:xwhwlfZy0
質問者が本職では?
0389デフォルトの名無しさん (ワッチョイ 7fda-UXa/)
垢版 |
2022/12/15(木) 14:39:58.62ID:xwhwlfZy0
初心者でも本職っているだろ
0392デフォルトの名無しさん (アウアウエー Sa9f-arOL)
垢版 |
2022/12/15(木) 18:08:25.94ID:zS2qEH43a
ネット検索で出てきたコードを参考にして、あるシートから別のシートへ PageSetup オブジェクトのプロパティを引き継ぐ汎用コードを作ったのですが、 Application.printcommunication を触ると何故か処理がコケてしまいます
別のコード(プロパティの順番や数が違う)を試してみると Application.printcommunication = True のところで 1004 エラーが
調べてみると Application.printcommunication は法則性のないエラーを吐くことが多いらしいんですが、上手く安定して動作させる方法はないでしょうか
なお Application.printcommunication の操作を省くと重すぎて使い物になりません
0393デフォルトの名無しさん (ワッチョイ bf19-TX1J)
垢版 |
2022/12/15(木) 22:51:51.95ID:SZeJUdRk0
VBAが本職ではないけど
他言語を含めてプログラマーってことなら
意外と本職の人いそう
0397デフォルトの名無しさん (ワッチョイ 47da-u86g)
垢版 |
2022/12/16(金) 07:47:34.39ID:nXqIC3mr0
>>392
解決方法じゃなくてすまんけど。
trueを設定してこけるということはその前にfalseを設定してるのだと思うけど、
falseとtrueの間の処理でなんの設定を変更するとこけるのかを地道に探し出すしかないような気がする。
プリンタ関係だとページ設定あたりかと思うけど思わぬところが影響してることもあるし、プリンタ環境は千差万別だしね。
0400デフォルトの名無しさん (ワッチョイ 6a2f-8Cre)
垢版 |
2022/12/17(土) 14:34:09.55ID:rC46nFCS0
>>392,398
ちょっと気になって試したけど、それ、ほんとは
.Zoom = False の行でエラーになってるな

ステップ実行させてみればそこでちゃんとエラーになるんだが
普通に実行させるとそこでそのエラーが発生しないで、
PrintCommunicationで予期せぬエラーとなってるんじゃないか
(うちの環境では順番入れ替えて同じだった)

VBAのバグっぽいしマイクロソフトに問い合わせるのがよさげだが
一度ステップ実行で1行ずつ試してみれば?
0401デフォルトの名無しさん (スッップ Sd8a-e5AJ)
垢版 |
2022/12/17(土) 14:46:45.42ID:MTNASajBd
そのブログのコードは拡大縮小の部分についてみたいだけど
通常であれば有効にする動作を書くようなコードが必要なのに無効にするようなコードを書くから
当該エラーがでてるような感じにも見えるけどね
実際にエラーになる「.Zoom = False」を「.Zoom = 150」の様に修正するとエラーはでなくなるから
そういう書き方を心掛けないとだめなんじゃないかと思うわ

なので自分としては実際に設定したいページレイアウトをマクロの記録で取得してみたらといっている
0402デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/17(土) 14:59:41.69ID:RQDgBjgc0
>>400
なるほど。
そうなると.PrintCommunicationが認識出来ないプロパティがいくつかあるのかもしれないね。
ステップだとその時々で確認しにいくけど走らせるとPrintCommunication=trueで一括設定しようとするからそこでエラーって感じかな?
1004エラーってコードに不備があるときに出る印象があったから個人的に納得。

なんか参考になった。試してくれてありがと。
いや質問者じゃないんだけどw
0403デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/17(土) 15:03:53.79ID:RQDgBjgc0
>>401
ああ、それもそうだね。
『ズームを有効にするか無効にするか』
じゃなくて
『拡大縮小率をどのくらいにするか』
を具体的に指定するプロパティなら確かにその通りだわw
0404デフォルトの名無しさん (ワッチョイ 6a91-Ihjc)
垢版 |
2022/12/18(日) 18:40:43.65ID:EVD3BPiK0
A1の数字が10以上で、B1の文字がたた、なな、はは、まま、やや、ららが含まれている場合に、D1にプレゼントと書きたいんですけど、どういうvbaか教えて頂きたいです。
B1の候補が50個以上あって、COUNTIFとかで全部入れるのが大変なんです…
A列B列には、それぞれ100行くらいあります。
0405デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/18(日) 18:47:30.46ID:dVPwMTg0d
馬鹿って仕様すらまともに書けないから馬鹿なんだよな
0407デフォルトの名無しさん (ワッチョイ 377d-VwZX)
垢版 |
2022/12/18(日) 20:52:35.12ID:ik+0WLv80
特定のフォルダにある一番新しいファイルを
開いて、内容をクリップボードにコピーした
いのですが、どう書いたらいいですか?

その後DBアプリで処理する流れです。
0408デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/18(日) 21:23:56.35ID:dVPwMTg0d
ファイルをそのまま変換してdbに読み込ませればいいだろ

馬鹿って仕様すらまともに考えられないから馬鹿なんだよな
0409デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/18(日) 21:31:13.42ID:WS1FCRK3H
>>408
それってあなたの思い込みですよね
0410デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/18(日) 21:32:30.15ID:WS1FCRK3H
バカっていう方も悪いけど、それに対して韓国人呼ばわりはさすがにひどすぎると思う
いくら何でも言いすぎだろ
0411デフォルトの名無しさん (ワッチョイ 6a01-6ae9)
垢版 |
2022/12/18(日) 21:51:13.95ID:ciqdCn4z0
>>407
動かしてないからタイポとかあるかも

Dim FS As Object
Set FS = CreateObject("Scripting.FileSystemObject")
Dim Newest As Object
Set Newest = Nothing
Dim File As Object
For Each File In FS.GetFolder("特定のフォルダ").Files
If Newest Is Nothing Then
Set Newest = File
ElseIf Newest.DateLastModified < File.DateLastModified Then
Set Newest = File
End If
Next
Dim S As Object
Set S = Newest.OpenAsTextStream(1, -2)
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText S.ReadAll
.PutInClipboard
End With
S.Close

Bug: ファイルが存在しない時はエラーになります
Bug: 一番新しいファイルが複数あるとどれが開かれるかはわからない
0416デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/19(月) 13:01:38.97ID:mXgw/9zbd
他人に馬鹿と指摘するのは事実だから仕方ない
本当のことを指摘されて何が問題なのか
己が馬鹿と指摘されると怒るのは本物の馬鹿
0419デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/19(月) 16:42:50.56ID:mXgw/9zbd
ならないよ?俺は馬鹿だもの
0421デフォルトの名無しさん (ワッチョイ 1f5f-JDfe)
垢版 |
2022/12/19(月) 16:56:24.98ID:4PT5wSnn0
いまさらなんだが・・・

もしかして、件数がそれなりにあるエクセル処理の場合、VBAでDictionary処理できるやつは、いちどDictionaryにデータ格納してから処理したほうが圧倒的に速い?
0423デフォルトの名無しさん (ワッチョイ 7eda-pE1b)
垢版 |
2022/12/19(月) 18:11:27.44ID:Q9Z7wkA40
質問投げて回答待つほうが圧倒的に遅い
0428デフォルトの名無しさん (アウアウエー Sae2-D+GZ)
垢版 |
2022/12/19(月) 23:02:14.70ID:U+dm2FUka
俺はdictionaryが好きでよく使うなあ
「ソートキーを格納したdictionaryを受け取って任意のシートをソートするコード」とか、「キーワードを格納したdictionaryを受け取って任意の配列からそのワード以外の要素を取り除くコード」とか、そういう汎用モジュールを作りまくってる
「その引数、配列でよくね?」って自分でも思うのだけれど、なんとなくdictionaryにしちゃう
0432デフォルトの名無しさん (ワッチョイ e619-tZgX)
垢版 |
2022/12/20(火) 08:51:53.19ID:7Yt8rmHX0
>>429

なんで文字列をオブジェクトに変換する必要があるの?
普通に考えてエンティティクラス作って
その中に内部変数として持っておいて
プロパティとしてやり取りするのが定石でしょ?
0435デフォルトの名無しさん (アウアウウー Sa9f-A+LM)
垢版 |
2022/12/20(火) 13:00:22.05ID:EWiE8iETa
8万行×100列(うち、実際に使用するのは15列程度)のデータを
集計表に沿って集計しようとしてるんだけど君らならどういう手法使う?
集計の行は不定で列は日付とし、エラーは別シートに抽出する

データを配列格納してfor nextで回したらすげー時間かかったわ
大人しくピボット作った方がいい?
0436デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/20(火) 13:06:53.84ID:qCWJzpQcH
>>435
fornextで何やるかによるけど、
ピボットが一番楽だと思う
0438デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/20(火) 13:23:47.04ID:qCWJzpQcH
なんでcsvにしてpythonに投げるんだよw
0440デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/20(火) 14:09:44.13ID:qCWJzpQcH
>>439
vbaとピボットの組み合わせが結構めんどくさいのは同意だけど、
そもそもピボットならvbaいらなくないか?
0441デフォルトの名無しさん (アウアウウー Sa9f-A+LM)
垢版 |
2022/12/20(火) 14:31:05.94ID:EWiE8iETa
>>440
仰るとおり単なる集計だけならVBAいらないのだけど、
>>435に書いた通り既定の集計表に沿って作成する必要があるから
作成したピボットからデータを拾って集計表に転記しなきゃいけないんだわ

集計表に載らないエラーデータのピックアップもしなきゃいけないし
0442デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/20(火) 15:06:56.96ID:qCWJzpQcH
>>441
なるほどなー
実データ見てないからなんとも言えないけど、
俺なら列を追加して、
関数かvbaで非集計対象にtrueを入れるなどしてからピボット、
という感じで運用すると思う
0443デフォルトの名無しさん (アウアウウー Sa9f-A+LM)
垢版 |
2022/12/20(火) 15:38:38.78ID:EWiE8iETa
>>442
なるほど、サンキュ
しかし、エラー判断のためだけに8万行を走査させたくないんだよね、、、

やるならピボット作った後でやったほうが走査数減りそう

やはりVBAでのピボット操作特訓だな
0445デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/20(火) 16:32:45.59ID:qCWJzpQcH
回答しにくいとかどうでも良くね
しっかりとした質問ならまともな回答が得られるし、
曖昧な質問なら抽象的な回答になる
それだけの事だよ
0447デフォルトの名無しさん (アウアウウー Sa9f-A+LM)
垢版 |
2022/12/20(火) 17:04:37.21ID:EWiE8iETa
確かに質問内容としては抽象的過ぎたね。
申し訳ない
でも俺としては十分な回答だった
取り敢えずVBAのピボットを練習するわ

ちなみにエラーってのは既定の集計表(マスター)から漏れたデータってことね。
0449デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/20(火) 21:40:21.98ID:0qEHdpxk0
>>435
WorksheetfunctionからCountifで存在確認。
Matchで行番号取得。
Rangeを変更しながらループしてすべての行番号を蓄積。
速いかどうかはわからんけど8万行走査するよりは工程は短い気がする。
0450デフォルトの名無しさん (ワッチョイ e619-tZgX)
垢版 |
2022/12/20(火) 21:59:31.44ID:7Yt8rmHX0
>>435
まあ集計がSQLで書ける範囲なら
ADO接続でSQL投げて結果のレコードセットを
シートに貼り付けて終わりにするわな
0451デフォルトの名無しさん (オッペケ Srb3-iJiy)
垢版 |
2022/12/21(水) 19:10:54.88ID:02wHfQMcr
8万行100列をセルだけで処理しようとしたら凄く時間かかるのわかるけど、配列にいれて処理したらそんなにかかるか?
それこそDictionaryで集計して結果だけ貼り付ければ充分だと思うんだが
0454デフォルトの名無しさん (ワッチョイ ea90-ZR1D)
垢版 |
2022/12/21(水) 21:46:19.74ID:muf0Z7I50
VBAが就活で必要になりそうなんだが、みんなはどうやって勉強してるか教えて欲しい
おすすめの本とかyoutubeとか学習サイトとか
pythonとSQLはちょっとわかる
MOSのエキスパートレベルまでの知識はある


VBAってある程度までいくと、具体的なデータがないと学習しにくいよね
あちこちのシートの何千行のデータを連結、とか
理屈ではわかってても実際のデータ使わんと本当にちゃんと動くかわからんし
0457デフォルトの名無しさん (ワッチョイ 1f5f-US6j)
垢版 |
2022/12/21(水) 23:02:51.38ID:YheyKj3W0
今ならchatGPTにでも聞いてみたら出てきそうw
0460デフォルトの名無しさん (ブーイモ MM8a-A5cf)
垢版 |
2022/12/22(木) 01:27:48.52ID:7bAQ/DuzM
>>459
そんなサイトないよ。
「ハゲれば横山ノック」というサイトはあるけど。
0462デフォルトの名無しさん (ワッチョイ ea90-YpVp)
垢版 |
2022/12/22(木) 06:31:04.10ID:VSY8vUs50
>>459
100本ノックあったわ
これやってみるか
ありがとう

あとVBAってみんなExcel付属のアレで書いてるの?
vscodeの拡張見つけたからそっち使おうと思うけど問題ない?
0464デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/22(木) 07:18:24.23ID:U22vDUep0
>>454

郵便局の郵便番号データを取り込んでいろいろやってたことはある。
郵便番号から住所取得とかキーワードを含む住所の郵便番号をユーザーフォームでポップアップさせるとか表示項目を可変させるとか。
0465デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/22(木) 07:22:19.76ID:U22vDUep0
>>462
基本VBEで書いてる。最終的にはExcelのモジュールやクラスに入ってなきゃいけないもんだし。
ただ複雑になってよく判らなくなったり他人のコードを解析したいときなんかはVScodeに張り付けて読んだりもする。
0466デフォルトの名無しさん (ワッチョイ e619-tZgX)
垢版 |
2022/12/22(木) 08:27:50.14ID:vkTy/rgK0
>>462
EXCELVBAのVSCodeのなんてあるのか
まぁでもEXCELってRangeとかセル位置、
名前定義とかシート見ながらちょくちょく
走らせて確認する場合が多いから
EXCELに付いているVBエディタで
ブレイクポイント掛けてトレースしていく方が
EXCEL単体の作業せあれば楽だと思うけどね

.Net絡みだってUI絡みなら
VS Codeより使えるならVSCoreの方が楽でしょ?
0468デフォルトの名無しさん (ラクッペペ MMe6-974H)
垢版 |
2022/12/22(木) 09:07:55.33ID:GhJnH83bM
まずはVBの構文からだね
Subに()つけるだけでエラーになるからビビる
次はExcelの巨大なクラスライブラリ
Applicationから始まるオブジェクトツリーにアクセスできればExcelとのI/Oは完璧だ
コピペイヤーが理解していないのはデフォルトプロパティ
いろいろ省略出来て便利なのだがハマることになるだろう
やりたいことはマクロの記録ですぐ分かる
ワークシート関数まで使うのが理想なので最終的には「Excelの使い方」が一番難しい
0469デフォルトの名無しさん (ワッチョイ 37ce-DiWi)
垢版 |
2022/12/22(木) 10:13:12.73ID:YMkZN6Dm0
ネットがない時代は苦労したって言うけどさ、その「苦労」って結局は正解を手に入れるまでの「時間が長かった」ってだけのことなんだよね
わからないことがあると図書館か本屋へ行って立ち読み、それの繰り返し
ぐぐりまくるのとやってることは同じ
0470デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 13:55:10.49ID:llMY0dtCH
いや、購入した本が間違ってる場合もあったんだよ
今なら複数のサイト比較して一番いいコードを参考にするって出来たけど、
当時は変な本に当たるとどうしようもなかった

良い本かどうかの判定も難しかった
0473デフォルトの名無しさん (ワッチョイ 6ada-DiWi)
垢版 |
2022/12/22(木) 17:00:36.54ID:nD0nOW6q0
いちばん最初は、分厚い説明書付いてきた 足りなければmicrosoftのFaxへ電話して
欲しい情報の番号押せばダラダラと何十枚ものFAX資料として引っぱり出せた
金有る奴は説明書の最後のページにある有料版の冊子を取り寄せてた ヘルプが充実してきてそれらは廃れた
0475デフォルトの名無しさん (ワッチョイ 6a01-6ae9)
垢版 |
2022/12/22(木) 19:04:05.80ID:dL3lthyL0
>>469
趣味ならともかく曲りなりにもビジネスなら時間は重要だろ
あと、ちょっとレアな手法(例はよくないかもだけど例えばクラスにデフォルトプロパティを追加する方法とか)は載ってる本を探しきれない
0476デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/22(木) 19:55:30.36ID:b1U2eBw5d
>>472
頭の弱い人の幼稚な発想だね
何歳?
0479デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/22(木) 20:57:06.81ID:b1U2eBw5d
>>477
自分がどんな馬鹿なことを聞いたのか理解できないのか?
真正の馬鹿だな
0480デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 21:07:40.03ID:llMY0dtCH
>>471
だからネットなら比較簡単って言ってるじゃん
最初に見つけた解決法でハイ終わり!って小学生かいな

>>478
気にしたこと無かったけど、凄い方法で実現できるようだ
https://thom.hateblo.jp/entry/2015/02/16/003000
エクスポート、インポートでやっと実現するとか面白いコーディングだ
0483デフォルトの名無しさん (ワッチョイ ea90-YpVp)
垢版 |
2022/12/22(木) 21:53:51.19ID:VSY8vUs50
Range(Cells(7, 1), Cells(7, 3)) = "一括入力"
Range(Range("A7"), Range("C7")) = "一括入力"
Range(Cells(7, 1), Range("C7")) = "一括入力"
Range(Range("A7"), Cells(7, 3)) = "一括入力"

結局セルの指定方法のひょうじゅんってどれなの?
0485デフォルトの名無しさん (ワッチョイ 6a01-6ae9)
垢版 |
2022/12/22(木) 22:31:11.78ID:dL3lthyL0
>>483
範囲が固定なら
Range("A7:C7") = "一括入力"
可変なら
Range(Cells(R1, "A"), Cells(R2, "C")) = "一括入力" ' 行可変
Range(Cells(7, C1), Cells(7, C2)) = "一括入力" ' 列可変
Range(Cells(R1, C1), Cells(R2, C2)) = "一括入力" ' 両方可変
かな
まあ他にもReSize( )使ったりケースバイケースかと
0487デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 23:10:32.55ID:llMY0dtCH
>>483
そもそも一括入力する場面ってのがほぼ無いと思うが・・・
vbaでテンプレートを作らざるを得ないような状況なら、一番上かな。アルファベットでセル指定する意味は無い

>>484
お前がアホだからアホみたいな意見が付いてるんじゃないか
>>472はちょっと酷すぎるぞ
0490デフォルトの名無しさん (ワッチョイ 9710-3IAs)
垢版 |
2022/12/23(金) 00:17:53.03ID:cgp6NnPO0
>>487
都合の悪い質問に答えられないか。。
あんたさ、職場で上司や同僚から「取っ付きにくい人」とか「話かけにくい」って言われてないか?

そういう性格早く正さないとハブられるよ?
0491デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/23(金) 01:52:37.99ID:9H6cWVdzd
>>490
馬鹿だと事実を指摘されて悔しい馬鹿
0494デフォルトの名無しさん (スッップ Sd8a-zw/P)
垢版 |
2022/12/23(金) 11:57:56.55ID:UPL2DLzJd
別ファイルの複数シート(日付ごと)の特定の値を日付ごとにとってきたい場合ってどうしたらいいんでしょうか
0496デフォルトの名無しさん (ブーイモ MMbf-yF9r)
垢版 |
2022/12/23(金) 12:35:41.71ID:urphUqXfM
マクロの記録で生成されたコードからスタート
0498デフォルトの名無しさん (スッップ Sd8a-e5AJ)
垢版 |
2022/12/23(金) 13:38:51.27ID:qgR3sDVKd
業務命令で仕事のタスクとして依頼されるなら応じるだろ
それとVBAを教えてやれって言われることなんてあるか?
なんらかの業務で使ってる○○を直すからわからない事があったら質問してくるんで教えてやってくれ
みたいな依頼じゃないのか
0500デフォルトの名無しさん (アウアウエー Sae2-D+GZ)
垢版 |
2022/12/23(金) 15:22:20.31ID:9qrIygbaa
ユーザーフォームを表示してテーブルにあるデータのうち任意のレコードを入力させるマクロを作っているのだけれど、テキストボックスにするべきかコンボボックスかそれともリストボックスをクリックさせるべきか、迷っている
皆さんはどういうUIにしてますか?
0503デフォルトの名無しさん (アウアウエー Sae2-D+GZ)
垢版 |
2022/12/23(金) 16:13:57.75ID:9qrIygbaa
>>502
テーブルにあるレコードは100件くらいで、その中からなるだけ手っ取り早く入力できるようにしたいんですよね
テキストボックスとリストボックスを併用してどちらか好きな方から値を取れるようにした方がいいのかなと考えています
0504デフォルトの名無しさん (ワッチョイ a301-iJiy)
垢版 |
2022/12/23(金) 16:36:35.72ID:QA4NKpfz0
上司に言われただけじゃ無理でしょ
本人のやる気がなければいくら教えても無駄
まずは自分で調べてできるとこまで書いてもらって、無理ならいくらでも聞いてって形式じゃないと教えられないわ
そこらへんの講義してる先生じゃないんだから教材なんか持ってないのに1から教えるのは不可能
0505デフォルトの名無しさん (ワッチョイ bf7e-nV6H)
垢版 |
2022/12/23(金) 17:32:52.63ID:+XkEwRY60
お助けを願います

Range("A1") = "=SUBTOTAL(103,A4:A300)" & """/""" & "COUNTA(A4,:A300)"

計算式の結果と結果の間に文字列のスラッシュを置きたいが上手くいきません
0509デフォルトの名無しさん (ワッチョイ 1f5f-JDfe)
垢版 |
2022/12/23(金) 18:53:30.35ID:yAoZE/rR0
>>508
程度のレベルで身につくんだけど、実際日本人の9割以上はVBAなんて、出来ない。
よくエクセルマクロを使える割合見たいのがあるけど、ああいうサイトに行く人という母数でとっても3割程度。
実際は、まともな企業でも数百人に一人くらいしかいない。
だからVBAだけで神扱いされるんだけど・・・

本来は、幹部こそ覚える技術なんだよね。
システム化って、まさに業務運用そのものを決めるようなものだから。
0510デフォルトの名無しさん (ワッチョイ ea05-eCX6)
垢版 |
2022/12/23(金) 19:11:38.96ID:PMhHGTDf0
AからFの列範囲に何行あるかわからないデータがあるとき
データがあるセルの下に
オートシェイプを線を入れるにはどうしたらいいですか?
標準の線では線種が少ないのでオートシェイプでいれたいです
0511デフォルトの名無しさん (アウアウウー Sa9f-A+LM)
垢版 |
2022/12/23(金) 19:30:37.54ID:6wvtOpdna
>>507
本来うちの会社もそんな感じ考え方だったのだけど
部長(配列もfor eachも使えないレベルの自称VBA名人)が
旗振り初めたお陰でしょーもないVBA講座が始まったんだよ

俺自身は社内でVBA使えることを殆ど話したことなかったが、
お前もなんかちょっとは使えるみたいだから
講座受けて講師手伝えとか言われ始めたわ

下らなすぎてマジで憂鬱
0512デフォルトの名無しさん (ワッチョイ 1f5f-JDfe)
垢版 |
2022/12/23(金) 19:35:41.52ID:yAoZE/rR0
>>511
全員が使える必要はないんだよなぁ
VBAで無駄な作業を消していくから、社員はむしろ削られる方向になる。
だから、末端がやると摩擦が起きるから、幹部がやるのが正しいんだけどねぇ…。

幹部がプログラミングできると、それを理解しているんだけどね・・・。
そもそもシステム化とは、業務運用・業務ルール・業務管理あらゆるものを交換の利く末端に強制的に行わせるものなんだから、それって幹部の仕事だよね?ってはなしなのにね。
0514デフォルトの名無しさん (ワッチョイ 7eda-JDfe)
垢版 |
2022/12/23(金) 19:42:56.24ID:imkEbUvu0
>>497
勤務時間内ならそれも仕事だから教えるが
編集の方法だけ教えて細かな内容は自分で調べるように伝える
あとは「教えました」できないのは本人の勉強不足なので質問されれば答えるだけ
0515デフォルトの名無しさん (オッペケ Srb3-iJiy)
垢版 |
2022/12/23(金) 20:17:22.06ID:dQOM9Mcwr
仮に講義したとしても
「初心者にvbaの事をすべて教えるなんて不可能だから、取り敢えず基礎的な事だけ教えるか。配列まで教えるのは無理だな」

「セルだけで処理したら30分くらいかかるし固まるし使えない」

「配列使えばすぐ終わるよ」

「そんなの習ってない。教えないほうが悪い」

上司「何で教えないんだ。不備があるから評価下げる」

ってなる未来しか見えない
自分で調べる事ができるヤツは講義なんか必要なく聞かれた事に回答するだけで十分だしな
0516デフォルトの名無しさん (オッペケ Srb3-iJiy)
垢版 |
2022/12/23(金) 20:19:41.37ID:GG/9dHCFr
結局、講義したいなら有料の〇〇コースって外部の講義を使用するのが一番なんだよな
金がかかるコースなら明確に〇〇まで、って言えるし
金がかかんない内部での講義だと、最終的には教えないやつが悪い。講義するならちゃんと教えろって言い出すヤツは絶対いる
0521デフォルトの名無しさん (スッップ Sd8a-e5AJ)
垢版 |
2022/12/23(金) 21:45:43.34ID:qgR3sDVKd
>>510
マクロの記録で試しに線を引いてみたらコードを生成してくれるから
それをみてあたりとかつけてみたらいいんじゃないの?
特定セルの座標はTop,Left
高さと幅はHeightとWidthで取得できるから計算して引いてみ
0522505 (アウアウウー Sa9f-nV6H)
垢版 |
2022/12/23(金) 22:06:41.02ID:G+gOrUWca
>>506
ありがとうございます
concatなかったんでconcatenateを使いましたが同様にエラーが出てしまいました
基本から調べてみます
スレ汚しすみません
0524デフォルトの名無しさん (ワッチョイ 6bc7-90ZU)
垢版 |
2022/12/24(土) 10:17:10.27ID:4SoiJAnm0
>>522
セルに入れたい数式自体がエラーになる(間違ってる)からVBAでもエラーになってる。
セルに入れたい数式は下記かと。
=SUBTOTAL(103,A4:A300)&"/"&COUNTA(A4:A300)

VBAで書き込む場合。.Formulaは無くてもいけるけど明確に数式として入れたい場合は書いといた方がいい。
Range("A1").Formula = "=SUBTOTAL(103,A4:A300)" & "&""/""&" & "COUNTA(A4:A300)"
0526デフォルトの名無しさん (ワッチョイ 6bc7-90ZU)
垢版 |
2022/12/24(土) 13:48:48.91ID:4SoiJAnm0
>>525
それでもいい
0531デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/27(火) 12:56:35.30ID:4LpiodjLH
このスレに質問が来ればいくらでも回答するよ
0533デフォルトの名無しさん (ワッチョイ 8f5f-aH43)
垢版 |
2022/12/27(火) 14:52:53.05ID:ITKU+yxr0
>>515
VBAを教えるのに必要なのは、講義の時間ではなく、「自分でも業務改善プログラムを作れた!」っていう成功体験だと思う。
処理速度云々は、相当後のほうでいいと思う。

ここで、資質があるやつと、そうでないやつがわかる。
資質のあるやつは、自分の作ったプログラムをさらに改善しようと、いじる。
このいじる作業をしているやつだけを見つけて、さらに教える。
改良作業をやってるやつは、理屈を理解し始めているから、いじれる。
そして、そのうちマニュアルやサイトでの調べ方と適用方法を理解して、自然と、命令数が増えてくる。

改良を試みてないやつは、たぶんプログラム自体、どっかから丸々コピペしてきて、それで運よく目的を達成できてるだけだから、動作原理わかってない。
ゆえに、次の問題を与えても、成長していないから組めない。
0534デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/27(火) 15:30:01.29ID:4LpiodjLH
>>532
このスレをずーっと過去に遡って、面白そうな奴を片っ端から解いていくだけでいいんじゃないか?
俺は毎日やってるから出来ないけど

あと、vbaよりもスプレッドシートのGASのほうが色々出来て面白いよ
0540デフォルトの名無しさん (ワッチョイ 5319-GrCd)
垢版 |
2022/12/28(水) 23:15:21.21ID:5cqOgtBW0
いや奈良公園にせんべい持ってくと鹿に襲われるけどな
0544デフォルトの名無しさん (ワッチョイ 5b66-s0Sd)
垢版 |
2022/12/30(金) 09:09:52.34ID:WIIszMQ70
Excell2019 win10という環境で標準のVBEを使用しています。
ローカルインドウやウォッチウインドウにて多次元配列の中身を確認しながらデバッグを
している時に、一個ずつ+マークを押して展開するのが不便に思っています。

一行ずつ動かしながら逐次中身の変化を追いかけたいので、ずっと展開しっぱなしにしたいです。

ボタン一発で配列全部展開してくれるとか、展開しっぱなしにするとか何か良い方法はないでしょうか?
0545デフォルトの名無しさん (ブーイモ MMb9-k9wW)
垢版 |
2022/12/30(金) 10:22:12.46ID:xFabiT9dM
無い。
配列の内容をワークシートに展開する関数を作って、
イミィディエトウインドウから 関数(配列) と実行。
0546デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 11:00:35.06ID:zE3ePWnpH
最初から個別の値をウォッチ式に入れておくとか
a(0)
a(1)
0547544 (ワッチョイ 5b66-s0Sd)
垢版 |
2022/12/30(金) 11:34:25.20ID:WIIszMQ70
>>545>>546
ありがとうございました。
個別でウォッチ追加します。
0549デフォルトの名無しさん (ワッチョイ c1b1-fqia)
垢版 |
2022/12/30(金) 15:58:51.64ID:IwLtnZMZ0
複数のExcelファイルで作業をしていると、ふと見るとVBEの左側のツリーに立ち上げたファイル名がずらずら並んでいることがあります
普通はそのファイルを閉じればツリーから消えるのですが、たまに消えずに延々と溜まりまくるときがあります
こうなるとメモリ消費しまくって最終的にはメモリ不足で動かなくなります

こうなってしまうのはどんな理由が考えられるのでしょうか
それとも、Excelは定期的に全部閉じる癖をつけておくべきなんでしょうか
0550デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 17:13:53.47ID:zE3ePWnpH
>>549
Excelがファイル閉じるのを失敗している
その場合、一度失敗するとそれ以降全部失敗する

再インストールか、メモリの増設した方がいいと思う
あとLAN上にあるExcelファイルを開くとそれになりやすい
0552デフォルトの名無しさん (ワッチョイ c1b1-fqia)
垢版 |
2022/12/30(金) 17:56:14.08ID:IwLtnZMZ0
>>550-551
ありがとうございます
他ファイル参照するために開いて閉じるようなマクロは結構多用してます
基本的には単純に開いてはデータ引っ張って保存せず閉じるというような内容ですが…

参照するファイルはLAN上ではありませんが、OneDriveの共有フォルダには置いてあります(ローカル保存)
一度この辺のマクロを見直してみたいと思います
原因がわからなければ再インストールしてみます
0553デフォルトの名無しさん (ワッチョイ 57da-dxp0)
垢版 |
2022/12/30(金) 19:08:24.88ID:k0Mu53Mo0
>>549-552
ウチもマクロで他の個別ブックを開いて
その中のマクロを実行して上書き保存・当該ブックを閉じる
をやってたけど、VBEの左側ツリーに閉じたはずのブックがズラズラ・・・

開くブックが70個ちょっと、中のクエリーをテーブルとして変数に設定するところで
いつもコケるようになった。
ブックの保存先はいずれもローカル。

操作するブックと操作される個別ブックの変数、プロシージャ名は
重複しないようにしていたがダメ。
次のブックを開くインターバルを1秒~とか、
クエリーはテーブルオブジェクト変数に入れているので、
毎回Nothingを入れてみたがダメ。

結局、地域毎に開くブックを50個くらいに収まるように
操作するブックを分けた。

ブックを割り当てる変数と、
それを保存・閉じる記述を見直してみようと思う。
0554デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 20:11:23.30ID:zE3ePWnpH
>>552
onedriveか、あれもLANと同様になんか変な挙動になっている
僕はあまりの挙動不安定さにスプレッドシートに逃げたよ

閉じる動作・共有に関して、もっと突き詰めたほうがいいかもしれない

カンだけど僕がやるなら以下のような形です。解決するかどうかは不定。

・開いたExcelを、一回activebookにしてから閉じる
・適度に、OSに処理を返す。forを使っている+時間が掛かっている場合、適当にDoEvents()を挟んでみると改善する可能性があります
・onedriveの挙動が予測できないので、一旦ダウンロードフォルダなどにコピーしてから使ってみる。
 どうも共有フォルダはタイムラグがあるのか、意図しない非同期になってしまい良くないことが起こっている気がする。

非常に問題を捉えづらい、難しい問題と思います。頑張ってください
0555デフォルトの名無しさん (スッップ Sd57-dxp0)
垢版 |
2022/12/30(金) 20:26:56.53ID:esJPCknOd
>>553
WorkbookやWorksheet含めてObjectは順序だててNothingするようにしたらそんなこと起きないとおもうよ
set oWB = xxx
set oWS = oWB.xxx
なら
set oWS = nothing
set oWB = nothing
という順ね
面倒でもNothingで解放するクセつけたほうがいいと思うぞ
0556デフォルトの名無しさん (ワッチョイ 1a90-5nMs)
垢版 |
2022/12/31(土) 09:58:21.76ID:doxP0Tnc0
マクロの管理・閲覧ってみなさんはどうしてるんでしょうか?

基本的にはブックの中に保存してるとは思うんですが
ブック開かないと中身確認できないですよね?
何らかのファイルに中身を保存して、たとえばvscodeなどのエディタで開いたりするのでしょうか?
0557デフォルトの名無しさん (ワッチョイ 9a01-+uJR)
垢版 |
2022/12/31(土) 10:37:26.00ID:YncayN1e0
俺は普通にブックをSVNでバージョン管理してる
差分を見たい時は見たいバージョンを保存して最新版と保存したバージョンから各々エクスポートして差分を取ってる
VsCode の拡張もあるみたいよ ⇒ >>462
0558デフォルトの名無しさん (スッップ Sdba-TwI4)
垢版 |
2022/12/31(土) 11:33:27.48ID:h8iAJsoLd
>>556
ブックのマクロを別ファイルに保存するということはコードの2元管理になるからしない
普通にブック開いてVBEでみるだけでそれで困ったことはない
別のブックのコードを参照したい場合は一時的にそのコードをコピペしてエディタで見ることはあるけど終わったら削除してる
何度も手直しするような事もないからバージョン管理もしてない
0559デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2022/12/31(土) 12:12:05.76ID:60VcS97wH
>>556
特にしてない

昔はよく使う「最終行の取得」や、「set〜」なんかをまとめたブックを作ってそれをコピペしていたけど、
コピペしないほうが早い事に気づいてからはそういうのもなくなった
高速化もよほどじゃない限りしなくなったな。
0560デフォルトの名無しさん (ワッチョイ b666-9yt5)
垢版 |
2022/12/31(土) 14:12:00.31ID:QIMjPb7U0
vbaでファイルを開くダイアログを出させて、ユーザーに任意のシートを指定させ、
VBA側でそのシートオブジェクトを取得して、解析をするというものを作ろうとしています。
よろしくお願いします。

ttps://oshiete.goo.ne.jp/qa/3042408.html
こちらに「シートを選択させてアクティブにする」というコードがあります。
ttps://www.kurumico.com/excel-vba-file/315/
こちらには「ファイルをダイアログから選択指定して開く」というコードがあります。

単純に組み合わせたら願望はかないました。

そこで質問したいのは
MyDialog.Controls.Add(ID:=957).Execute
これが一体何なのかということです。
エクセル2019の左下にあるシート一覧を左右に移動する
← →
このマークのところで右クリックをすると同じようなシート選択ダイアログが出てきます。
そして選ぶと、アクティブになります。

957を一覧から探してもこういう説明を見つけられないでいます
そういう理由からCommandsBarsもControls.addもイマイチ理解を深める事が出来ずにいます。
どこかいい説明サイトがありますでしょうか?
0561デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2022/12/31(土) 15:46:44.58ID:60VcS97wH
>>560
無かった
一応コードの意味から
'新規コマンドバーを一時的に追加する
Set foo = CommandBars.Add(Temporary:=True)
'上記にコマンドID957を追加し、実行する。2はスペルチェック。多分1はダミーコードでなにも起こらないはず。
foo.Controls.Add(ID:=957).Execute

で、この957って何って質問なんだろうけど、これはシート選択ダイアログのIDと思われる。
普通は定数名で設定し、マジックナンバーは使わない。
foo.Controls.Add(xlSheetList).Execute 'のような形になるはず
定数名とIDの対応表がどこかにあるはずなんだけど、全然見つからない。もしかすると無いのかもしれない。

使い方は公式を見るのが早い
https://learn.microsoft.com/ja-jp/office/vba/api/office.commandbarcontrol
https://learn.microsoft.com/en-us/office/vba/api/office.commandbarcontrol.id
一覧はこれだと思うけど、そこにも載ってない
https://www.microsoft.com/en-us/download/details.aspx?id=50745

ただこのコマンドリストを一時的に利用するというテクニックは、これ以外に使い道は無いと思うから
そんなに深く考えなくてもいいと思うよ
0562デフォルトの名無しさん (ワッチョイ 0379-rE+U)
垢版 |
2022/12/31(土) 16:01:13.15ID:jV5H7FOV0
俺もID=957が何なのか探したけど見つからんな
昔のExcelでもちゃんとシート選択ダイアログは出てくるからVBAが付いてるOfficeならバージョンによって動かないみたいな事は起きないと思われるが
これが気持ち悪い場合は適当な選択フォームを作った方が良いだろうね
0563560 (ワッチョイ b666-9yt5)
垢版 |
2022/12/31(土) 18:56:24.99ID:QIMjPb7U0
>>561>>562
調べていただきましてありがとうございました。
これで質問を解決とさせていただきます。
深く考えない事にしますが、これを初めて見つけた人はどうやって見つけたのでしょう…
0564デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2022/12/31(土) 19:13:19.72ID:60VcS97wH
>>563
昔はそういう一覧が合ったんだと思う
で、マイクロソフトが更新忘れて、忘却していると思う
(別に作る義務はないんだけど)
マイクロソフトに言えば、作ってくれるかもね
0567デフォルトの名無しさん (ワッチョイ a302-9j0N)
垢版 |
2023/01/01(日) 02:02:13.06ID:WHfKVncD0
素人質問で申し訳ありません。

G行(列?)にワンクリックで時刻を出るように

Private Sub CommandButton1_Click()
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("G2:G30000")) Is Nothing Then Exit Sub
Target.Value = Date
Cancel = True
End Sub
とvisualbasicで入力しました。

でワンクリックで「時間:分:秒」は出るようになりましたが、全部「0:00:00」
になってしまいます。今の「時間:分:秒」が出るにはどうしたらよいでしょうか。
ちなみにセルの書式設定で「時刻」⇒「13:30:30」の設定にしてあります。
よろしくお願いいたします。
0569567 (ワッチョイ a302-qF/f)
垢版 |
2023/01/01(日) 02:19:43.81ID:WHfKVncD0
>>568
ID違うかもですが早急なご回答感謝です。
下から3行目のDateをNowに変更いたします。
ID:U+Y4eA/v0様とご家族の今年一年の
健康をお祈り申し上げます。
0570デフォルトの名無しさん (ワッチョイ b666-9yt5)
垢版 |
2023/01/01(日) 09:02:52.64ID:QhZkuHz30
凄く初歩的な事かもしれませんが、自力でわからなかったので教えてください。
コマンドボタンが3つあって、そのうち1つがエラーで止まるとします。
エラーで止まるボタンをA
正常なコードになっているBとCみたいな

Aを押してエラーが出たらVBE画面が開いてしまいます。
そしてVBE側のリセットボタンを押さないと処理がリセットされません。
これを気にした事はありませんでした。

しかしこれから他人に使わせたいので
【1】エラーが出ても一時停止ではなくて初めから完全停止になって欲しい。
【2】エラーが出てもVBE画面が開いて欲しくない

こういうのはどうすれば良いのでしょうか?
0571デフォルトの名無しさん (ワッチョイ 8b01-lHxW)
垢版 |
2023/01/01(日) 09:28:20.79ID:l9m14P5Y0
>>570
【2】はOn Error Go To を使ってエラーが出たら処理を辞める方法がある
もしくはエラーが出る特定のところのみOn Error Resume Nextを使ってエラーを無視して、その時にErrオブジェクトが値を持つかを見て値を持ってたら処理をやめるとか
【1】は無理
というかエラーが出ることが分かるならエラーが出ないように直すべき
個人で使うのならいいけど、他人に使わせるのにエラーが出たままは相当マズい
0572デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2023/01/01(日) 09:31:32.39ID:N3XMs5RAH
>>570
エラートラップはかなりしっかりやっといたほうが良いけど・・・
対処法として、gotoとresume nextがある
gotoはちゃんとした分岐
resume nextはエラー完全無視でそのまま実行し続ける。
後者は超危険だけど、自作ゲームぐらいならこれで済ませてもいいと思う

Sub foo()
On Error GoTo err
foo2 = 0 / 0 '0で割り算

MsgBox "エラーはありませんでした。通常終了です"
Exit Sub '正常終了

err:
MsgBox "エラーが起きたので終了します"
End Sub

Sub bar()
On Error Resume Next
bar2 = 0 / 0

'通知
If err.Number > 0 Then
MsgBox "エラーが起きたようですがそのまま実行しました"
End If

End Sub
0573570 (ワッチョイ b666-9yt5)
垢版 |
2023/01/01(日) 13:29:35.26ID:QhZkuHz30
>>571>>572
無理でしたか…
「エラーが出たら一旦エクセルを再起動してもらって、私がコードを直すまではそのボタン触らないで」
っていう事にしようかと思います。

>というかエラーが出ることが分かるならエラーが出ないように直すべき
ハっとしました。
On Error Go To処理はエラーが出るの前提みたいで使うのいやだなと思ってましたが、
エラーを前提にしてたのはよっぽど自分の方でした。

解決です。ありがとうございました。
0574デフォルトの名無しさん (ワントンキン MM8a-HRUe)
垢版 |
2023/01/01(日) 20:36:34.67ID:QH48KlFOM
新年早々馬鹿か
こんなのが作ったものを使わされる人達可哀想
0576デフォルトの名無しさん (スッップ Sdba-QCOi)
垢版 |
2023/01/01(日) 21:18:44.46ID:gVENJcWpd
>エラーが出たら一旦エクセルを再起動してもらって

いや、馬鹿だろこいつ
0578デフォルトの名無しさん (オッペケ Srbb-lHxW)
垢版 |
2023/01/01(日) 22:55:58.30ID:SDgcSZSgr
>>573
「エラーが出たら一旦エクセルを再起動してもらって、私がコードを直すまではそのボタン触らないで」
これはいいけどさ、そもそもエラーが出るって分かってるものを使わせるのはヤバいだろ
エラーを出さないようにしてから使わせるか運用制限を書いとくかするのは必須だろ
それでもエラーが出た場合はそう言うのであって、最初からエラーありきはどう考えてもおかしい
0579デフォルトの名無しさん (スッップ Sdba-QCOi)
垢版 |
2023/01/01(日) 23:30:29.85ID:gVENJcWpd
>>578
よくないだろ
どんなエラーかどういうデータでエラーになってるかをエクセルを終了して全部消して連絡くださいと書いてるわけだ
馬鹿過ぎて片腹痛い
0580デフォルトの名無しさん (ワッチョイ df10-lHxW)
垢版 |
2023/01/02(月) 00:23:35.65ID:WJKKDxmM0
>>579
そうだな
エラーが出た時点で連絡するべきだ
ただ「馬鹿過ぎて片腹痛い」これは言うべきか?
こういうことを言ったら萎縮してスレに書き込む人が減るだけ
メリットがなにもないどころかデメリットしかないことを言う意味はない
0581デフォルトの名無しさん (ワッチョイ 9a4b-o0Tc)
垢版 |
2023/01/02(月) 00:43:21.31ID:qD3952vu0
エラー地雷が必ずあるボタンとか怖すぎる
マクロの結果は元に戻せないから、コードの先頭に関係するブックをセーブするように書くことをお勧めする
0582デフォルトの名無しさん (ワンミングク MM8a-HRUe)
垢版 |
2023/01/02(月) 00:49:52.66ID:4s2WSfqGM
>>580
内容も吟味せずに脊髄反射で書き込んで馬鹿を擁護するお前のような奴が馬鹿を蔓延らせることに気付くべき
0583デフォルトの名無しさん (スッップ Sdba-QCOi)
垢版 |
2023/01/02(月) 02:07:30.17ID:u1h4+miEd
>>580
>>560 にも答えられない馬鹿に言われてもな
0585570 (ワッチョイ b666-9yt5)
垢版 |
2023/01/02(月) 11:24:49.11ID:5oIC6wjS0
なんだかすみません。
今回は主にファイルオープン関連で「絶対にエラーが出ない全てに対応したコード」というのが
書く自信がありませんでした。勉強不足です。

今も一つわからないのですが、例えばマクロと同じフォルダにあるBookAを開いてる状態で、
BookAファイルをさらにオープンしようとするとwin10office2019の当方環境においてエラーが出ないのですが、
これは基本的に他のパソコンでもエラーが出ないのでしょうか?
winxp以降office2000以降あたりであれば大丈夫なものなのでしょうか?

別フォルダにある同名ブックを開こうとするとエラーになります。
こちらは開く前にファイル名で既に開いてるブックを確認するコードを追加しようとみたいなサイトが
いくつも見つかるので解決したのですが、既に開いてるファイル自身を開く事が成功してしまう
ケースを通常と思ってエラーの出ないコードと考えてよろしいのでしょうか?
0586デフォルトの名無しさん (ワッチョイ 0eda-TwI4)
垢版 |
2023/01/02(月) 11:57:58.32ID:C7IOio2r0
初心者が思い込みで作ると失敗する
開発環境と実行環境がバージョンやパッチも含めて違うなら同じ環境で動作の確認をするしかない
作ったら終わりではなく、条件を変えても正しく動作するかを確認するくらいやれよ
長いファイル名とか共有フォルダとか、サイズ0に壊したファイルとか作って試すなど
0587デフォルトの名無しさん (ワッチョイ d7da-XlTg)
垢版 |
2023/01/02(月) 13:14:15.32ID:cWlG9T3F0
当たり前だけどファイル操作はVBAの知識以外にOSの知識もある程度必要になるから聞かなきゃ判断できないような処理ならやらないが吉かと。
開くのは諦めてせいぜいファイルの存在確認程度にとどめておけば?
0588デフォルトの名無しさん (スッップ Sdba-TwI4)
垢版 |
2023/01/02(月) 13:45:13.52ID:N69RPsxQd
>>585
自分はWin10+Ofiice365だけど
開いているファイルと同じフォルダのファイルを開こうとすると開いているファイルがアクティブになって
別フォルダの同名ファイルであれば同じ名前のファイルは開けないってエラーになるから
古いバージョンでも一緒なんじゃないかと思うけど
回避したいならWorkBooksの内容をチェックして同じファイル名があればメッセージを出して処理を止めるなりすればいいんだと思うけどね

古いバージョンでもチェックしたいなら単純にフォルダA、フォルダBに同じファイルをいれて両方開けるか試してもらうだけでいいと思うぞ
0589デフォルトの名無しさん (ワッチョイ 9ada-/EFQ)
垢版 |
2023/01/02(月) 14:06:13.66ID:v+YqJ02u0
多分だけど、手動で同一ファイルをダブルクリックで開くような操作では無く
開いたファイルを元に「新しいウィンドウを開く」のようなコードを書いてると思う
いろいろとオリジナルというか無手勝流というか、な制作してるようだし、個人利用に留めとけ と忠告しておきたい
ま、他人からコテンパンに罵られて伸びるタイプも居ない訳でも無いから、ご自由になんだけど(例えばMS社 毎月バグって世界中から罵られても知らん顔してアプデを続けるし)
0590570 (ワッチョイ b666-9yt5)
垢版 |
2023/01/02(月) 21:56:15.06ID:5oIC6wjS0
ありがとうございました。
完璧なコードって、人間の行動を全て読むレベルのとんでもない高度な行為ですよね…
プログラムに携わりたいなら甘えずに向き合うべき課題なんだと思います。
年末年始みたいな時くらいしか勉強出来ないの悔しいですね。
0591デフォルトの名無しさん (ワッチョイ 9a4b-o0Tc)
垢版 |
2023/01/02(月) 22:55:02.83ID:qD3952vu0
上の方でエラーが出たら自分でコードを修正するって書いているから解決方法は知っているんだろ?
なら、Do loopとOn Error Go Toを使ってエラーが解決するまで、知っている限りの解決コードを全て書けばいいと思うが
0592デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2023/01/03(火) 00:15:50.12ID:QpUipTPJH
>>590
全てって言っても場合によるよ
入力内容のチェックなら数値文字列エラー値ぐらいでほぼ網羅できるけど、
ファイルを開いたりアクティブになったりってなるとExcelやOSとの兼ね合いも出てくるからほんとキツイ
通常操作の9割をカバーできればいいと思う

あとは起きたエラーに都度対応していくしかない
0594デフォルトの名無しさん (アウアウウー Sac7-9j0N)
垢版 |
2023/01/03(火) 01:34:33.44ID:JZU75e4ya
VSCode では、同名のファイルでも、パスが異なると開ける。
a/a.txt, b/a.txt みたいに判別できる

そもそも、そういう事を想定していないアプリがおかしい。
アプリを作る際に、これぐらい誰でも分かる
0595デフォルトの名無しさん (アウアウウー Sac7-9j0N)
垢版 |
2023/01/03(火) 01:35:01.24ID:JZU75e4ya
VSCode では、同名のファイルでも、パスが異なると開ける。
a/a.txt, b/a.txt みたいに判別できる

そもそも、そういう事を想定していないアプリがおかしい。
アプリを作る際に、これぐらい誰でも分かる
0596デフォルトの名無しさん (ワッチョイ fa74-s9wq)
垢版 |
2023/01/03(火) 01:52:28.54ID:r5MucSoo0
アルツハイマーでもこれくらい分かる
0597デフォルトの名無しさん (ワッチョイ 0379-rE+U)
垢版 |
2023/01/03(火) 06:33:04.83ID:t9t/KRTz0
最初にon error resume nextを書いとけばランタイムエラーを出さずに原因不明の謎の挙動だけで済む
もし時間に余裕があれば目星を付けた処理の直後でif err<>0 thenでエラーになってないかチェックする
エラーの検出後はon error goto 0でエラーをクリアして再度on error resume nextを仕掛ける
これぐらいいい加減でもVBAの場合は許されるから覚えておくといい
0600デフォルトの名無しさん (ワッチョイ 0eda-TwI4)
垢版 |
2023/01/03(火) 12:03:30.64ID:fDnSRX1A0
読み込みに失敗、書き込みに失敗程度の動作確認は初心者でなければやると思ってる
あとはエラーコード吐いて、異常がでた場合○○を確認してくださいとかで対応
フリーズしない、ファイルを壊さない、間違った表示をしないように作るのは最低でもやってほしいもんだ
俺ならそうするがみんなは違うのかな?
0601デフォルトの名無しさん (アウアウウー Sac7-+uJR)
垢版 |
2023/01/03(火) 12:39:40.67ID:a1UWVOIma
まあテストをどこまでやるかは状況次第だけどファイル関係をエラートラップしてリトライなりエラー表示をするのは普通だと思う
書捨てとか自分しか使わないならエラートラップを端折ってあえてVBAのエラーで止めるとかはある
個人的にないのは>>597みたいなエラーの握りつぶし
0602デフォルトの名無しさん (アウアウウー Sac7-IAh0)
垢版 |
2023/01/03(火) 13:00:34.65ID:NsWNvAiQa
まともな開発だとエラー握り潰しは絶対ダメだけどVBAだからなあ
必ずエラーが出るゴミみたいなマクロは珍しくないから、いっそ握り潰してくれた方がマシだと思うことはある
0610デフォルトの名無しさん (スッップ Sdba-TwI4)
垢版 |
2023/01/03(火) 15:58:29.44ID:zc6LNDpCd
>>593なんてハードウェアやその周りのソフトの対策であって開発するアプリケーションで考慮する話ではないと俺も思ってるけどな
まあ戻れないところまで追いつめられて必死なんだろうけどそろそろ落ち着いたらどうかね
0613デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2023/01/04(水) 09:44:30.63ID:fU7igCvDH
>>611
Seleniumでスクレイピングしようとしてるのは分かるけど、
その部分だけコード見せられても分からない
全部見せて
0617デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2023/01/04(水) 11:22:52.20ID:fU7igCvDH
>>615
まさにそれだね
招待すると挑戦回数が増える
謎アプリをインストールすると100円ぐらいもらえる
という仕組みらしい

プログラムを覚える同期としてはとても良いと思うが、
登録とか色々必要だからめんどくさくて検証できないな
0624デフォルトの名無しさん
垢版 |
2023/01/04(水) 23:17:45.40ID:J/WGQ1Ed0
自己解決しましたありがとうございます
0625デフォルトの名無しさん (オッペケ Srbb-yqJD)
垢版 |
2023/01/05(木) 12:03:16.68ID:iBplyV5pr
すみません、質問させてください
Listのようなものに最大5000行のデータを表示、編集、Excelに保存したいです
可能なツールと良ければアドバイス等頂けないでしょうか
0626デフォルトの名無しさん (ワッチョイ 0eda-mw5R)
垢版 |
2023/01/05(木) 12:18:42.51ID:fXFdLaAK0
Excelを使ってみたらどうかな
0632デフォルトの名無しさん (ワッチョイ b666-9yt5)
垢版 |
2023/01/05(木) 12:55:24.41ID:SJZhIGhQ0
エクセル2019とそこに付随するVBAでは日付の起点が違うのですか?
ちょっと調べると1900年をうるう年と勘違いしてるとかなんとかでてきます。

44932とセルに手打ちしてから日付に直すと2023/1/6になります。
=Now()をセルに入力して数値表示すると44932、しかし日付にすると今2023/1/5

VBAは1899/12/30=1でエクセルは1900/1/1=1ということでしょうか?
それでもつじつまがあわないのですが。
0634デフォルトの名無しさん (ワッチョイ 038e-QCOi)
垢版 |
2023/01/05(木) 13:09:13.57ID:oKKcVbTt0
僕ちゃんの頭の中にはlistviewと勝手に名付けた理想のツールが存在しますということか
0635デフォルトの名無しさん (JP 0He6-TwI4)
垢版 |
2023/01/05(木) 13:14:36.43ID:BoetuCcOH
>>633
う~~ん、Excelが駄目な理由がよくわかんないな

キャッサバとか使ってみては??
https://forest.watch.impress.co.jp/library/software/cassavaedit/

もしくはスプレッドシート+googleform使うとか

>>632
「数値」は四捨五入されるから同じに見えるだけだよ。シリアル値を確認する時は、小数点も表示した方がいい
ちなみにmac版が1900年-1904年ぐらいがうるう年かlotusかなんかの関係でズレている。1905年以降からは全てのバージョン・マクロで同じシリアル値になる
0637デフォルトの名無しさん (スッップ Sdba-TwI4)
垢版 |
2023/01/05(木) 13:33:51.27ID:f8HxjLWUd
>>630
どんな編集したいのか不明だけど楽したいならAccessでもいいんじゃない
そもそも質問が漠然としすぎててListの形式もわからんし
単一項目や相関項目の入力チェックとか何がしたいかも不明なんだよね
質問する側も回答欲しいなら要件を書き出せないと適切な回答もらえないぞ
0639デフォルトの名無しさん (ワッチョイ 9ada-/EFQ)
垢版 |
2023/01/05(木) 16:58:29.73ID:f2A56PmY0
>>632
ちょっとだけじゃ無くて、もっと調べると簡単に理由が出て来るじゃん
で、1900年の日付のデータを扱う必要が頻繁にあるのだとしたら、もっと詳しく調べて間違いが無いようにしとかないと
0646デフォルトの名無しさん (ワッチョイ 275f-O8Bg)
垢版 |
2023/01/06(金) 21:21:30.88ID:eBXD7Bag0
>>642
セルの書式との組み合わせだから、セルの書式を意識しないと「標準」ではまる。

Excelの「標準」はExcelだけにしかわからないから、Excelで閉じた世界でないから使わない方がいい。
0647デフォルトの名無しさん (ワッチョイ 515f-2AMo)
垢版 |
2023/01/07(土) 13:21:26.68ID:BFQrwMXK0
配列=range("A1:C3")
と格納した配列にrange("A5:C8")を追加で格納したいです
この場合、配列の要素1つづつに格納していくしかないのでしょうか?範囲をまるごと格納できますか?
0650デフォルトの名無しさん (JP 0H2b-Or7w)
垢版 |
2023/01/07(土) 21:17:42.27ID:KZGY+9uwH
>>647
用途がよく分からんけど、普通に文字列で結合していけばいいのでは?
オブジェクトで返す事もできる

Sub foo()

r = "a2:b3"
r = r & "," & "e3:f4"
r = r & "," & "h3:i4"
Range(r).Value = 1

Set ra = Range(r)
ra.Activate

End Sub

Intersect辺りでもなにかできそうかも?と考えたけど、
全然できないかもしれない
0651デフォルトの名無しさん (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/08(日) 01:02:59.56ID:mpsC9VsR0
オブジェクト指向って
Range.Offset(1).value
みたいな事でしょうか?

自作関数って基本は引数渡して返り値貰ってみたいな手続きするだけの存在ですが、
それをオブジェクトを作る関数(Rangeオブジェクトみたいなものを生み出せる関数)にして、
その関数から出てきたオブジェクトは
メソッドA、メソッドBが使えて、プロパティA、プロパティBみたいな状態も持っている
みたいな考えの元に組んでいくとオブジェクト指向なプログラミングになるのでしょうか?

それはやはりそういう形式を取った方が、少ない脳みそでも複雑化に対応できるという事なのでしょうか?

同じ機能を持ったプログラミングを後から書き直す事があります。
勉強を進めた結果、「もしかしてこういうルールで書いた方がわかりやすいかも」みたいに思って書き直します。
うまく行くと複雑だと思っていたものがとてもチープで難易度の低いものに見えてきます。

オブジェクト指向はその極致みたいなものですか?
0652デフォルトの名無しさん (ワッチョイ c179-Jp3v)
垢版 |
2023/01/08(日) 02:37:15.71ID:FOdy7Dic0
>>651
>みたいな事でしょうか?
それはメソッドチェーンという記法で、オブジェクト指向言語から生まれた副産物
一見便利で、実際これが無ければVB/VBAはとっくに廃れていたと思われる
ただしメソッドの呼び出しと中間オブジェクトの生成で毎回コストが掛かるため、
複数同じような処理を書く場合は一旦適当な変数で受けるか、VBAの場合はWithステートメントでまとめた方が良い
0653デフォルトの名無しさん (スッププ Sdb3-BvPj)
垢版 |
2023/01/08(日) 02:50:51.43ID:Z6otLx+Dd
オブジェクト指向の原理主義的には、関数の戻り値はあまり積極的に使用すべきではない
でもドットで階層を掘っていくのは頭悪い人にもわかりやすいから、VB系のエセオブジェクト指向ではわりとよく使われる
0654デフォルトの名無しさん (ワッチョイ 795f-dd/F)
垢版 |
2023/01/08(日) 03:26:30.83ID:nZw+zsKC0
>>653
「関数」という自分しかわからない用語の定義で話すのはやめろ
0655デフォルトの名無しさん (ラクッペペ MM4b-5Yp/)
垢版 |
2023/01/08(日) 08:20:15.45ID:oIS5HnAUM
オブジェクト指向には大きく分けてクラスベースとプロトタイプベースの2種類の流派がある
ちなみにExcel VBAのオブジェクト指向はどちらとも言えない傍流としか言いようがない
本格的にオブジェクト指向を学ぶなら別の言語の方が良い
0656デフォルトの名無しさん (JP 0H2b-Or7w)
垢版 |
2023/01/08(日) 11:07:33.40ID:9yImgFMvH
>>651
エクセルvbaの場合、オブジェクト指向かどうかは考えなくていいよ

オブジェクト指向かどうかは、オブジェクトをメインに据えるかどうかによる
しかしエクセルvbaは「エクセル」という超巨大なオブジェクトが中心なので、
普通に書いてたら勝手にオブジェクト指向になる
0658デフォルトの名無しさん (ラクッペペ MM4b-5Yp/)
垢版 |
2023/01/08(日) 12:08:40.63ID:6Q9yzQxXM
オブジェクトの設計図そのものを作って組み合せていくスタイルがクラスベース(C++やC#など)
半完成品のオブジェクトに手を加え加工したクローンを作って組み合わせていくスタイルがプロトタイプベース(JavaScript/TypeScriptなど)
Excel VBAは完成品として用意されたオブジェクトをそのまま利用するスタイル
(VBAのクラスモジュールは変数や関数を単純 にまとめるだけでクラス自体の拡張性はほぼ無い)
0660デフォルトの名無しさん (ワッチョイ c179-Jp3v)
垢版 |
2023/01/09(月) 00:09:50.06ID:2yNmR2Eh0
VBAのオブジェクト指向機能は、あくまでCOMを使うために設計されてると言っていいよ
OfficeやC++その他で作成されたCOMを利用するだけだし
クラスを作ったりできるのはおまけで、VBAでそこからさらに派生なんてことは誰もやらないし
0663デフォルトの名無しさん (スッププ Sdb3-BvPj)
垢版 |
2023/01/09(月) 13:50:58.25ID:iDst/v4Qd
現代的なオブジェクト指向ではクラスの継承はあまり使用せずインターフェイスを使うので、クラスを派生できないこと自体はそれほど問題ではない
とはいえVBAでクラスを使うべきでないのは同意する
0665デフォルトの名無しさん (アウアウウー Sa85-0mpF)
垢版 |
2023/01/10(火) 19:47:40.17ID:10oUx2C+a
VBAのたとえなんちゃってオブジェクト指向でもクラスは普通に便利じゃん

俺はカプセル化もオブジェクト指向も正直どうでもいいから
Publicで書いたりすることも少なく無い
0666651 (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/11(水) 00:58:56.65ID:UjJptVS80
オブジェクト指向の話は自分にはまだ早かったようです。
時間のあるときにC++やC#の世界がどんなものか覗いてみようと思います。
ありがとうございました。

ちょっと初歩的な事で質問をしたいのですが、
UserForm1の方に
Private Sub ButtonEnter_Click()
FormData = TextBox1.Value
Unload Me
End Sub
とあるとします。エクセルシート側のコマンドボタンに登録してるマクロには
Public FormData as Variant
Sub Sample()
FormData = 1
UserForm1.Show vbModeless
MsgBox FormData
end Sub
みたいにしてパブリック変数でフォームの入力値のやりとりをしようとしています。
しかしこれを実行するとユーザーフォームが表示された直後にMsgBoxが1表示してきます。
原因はvbModelessまでは調べが付きました。
RefEditでvbModeless使うとボタンが反応しなくなりエクセルの強制終了しか手がなくなる事も。
win10office2019環境特有かもしれませんが。

そこで質問ですがvbModelessって本来どうやって使うものなのでしょうか?
この挙動だと何にも使えない気がするのです。
処理がShowで止まらずに進んでしまうので入力値を受け取れませんし。
処理を止めるコードとセットで使うのでしょうか?
RefEditでは絶対にvbModelessは正常に動作しませんか?
0667デフォルトの名無しさん (スッップ Sdb3-Or7w)
垢版 |
2023/01/11(水) 07:07:46.99ID:ESDkH7B7d
画面表示後に後続のコードを実行させたくないなら vbModal にしないとだめ
vbModeless のままで作りたいなら後続のコードを画面側にもっていくか
ブック側に別のPublic関数として用意して画面側から実行するなりしないとだめ

vbModeless は画面を表示した状態でもブック側を操作できるようにしたいときに指定するものなので
そういう事をしたいときに使いましょう
0668デフォルトの名無しさん (ワッチョイ 19da-tb1I)
垢版 |
2023/01/11(水) 07:14:17.28ID:pPL7W2Oc0
>>666
vbModeless は単純にユーザーフォームを表示したままEXCELシートを編集できるようにするか
否かなので、入力待ちのような場合には不要ですね。
本来の使い方というか、特徴からしてフローティングツールボックスみたいなことができる感じ?
Photoshopとか見たことあるとイメージしやすいかな。。。

必要かどうかは置いておいて例えば、、、
複数のマクロが作ってあるEXCELファイルでシート上のコマンドボタンでマクロ呼出ししようと
すると当然、別シートに移ると使えなくなるけどvbModelessのユーザーフォームに作っておけば
シートを移ってもボタン一発で呼び出せる、みたいな?
あとはテーブルがいくつか作られているシートでテーブルを渡りながら編集する必要がある場合、
目的のテーブルのみを表示させるマクロを登録しておけば簡単にアクセスできるようになる、とか。
どちらもどうでもいい使い方だけどw
ユーザーフォームとのデータの受け渡しならココを参考にしてみては?
関数化して引数でやりとりしてしまえばいいような気がする。。。
https://excel-ubara.com/excelvba3/EXCELFORM010.html
0669666 (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/11(水) 10:17:37.94ID:UjJptVS80
>>667>>668
ありがとうございます。
パブリック変数よりFunctionの戻り値をうまく使うっていう方がいいのですね。
UserForm_Initializeもいらなくなりそうですね。
フォームが増えていくとフォーム毎に渡すよう受け取るようのパブリック変数作って
ちょっと管理しづらいなと思っていましたのでいい勉強になりました。
Hideも使っていきます。
モーダルだとフォーム出てる間、タッチパッドの二本指スクロールが正常に動作しなくなるので
そのためだけにモードレスに魅力を感じていました。
0670666 (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/11(水) 10:30:30.16ID:UjJptVS80
>>668
ちなみにそのサイトにあるdoModalというフォーム側に書くパブリック関数名ですが。
今試したところ、標準モジュールと違ってPublic Subで同名のdoModal関数を
フォーム毎に一つずつ名前重複エラーにならなかったんですが、これを仕様として受け止めて
フォーム側の呼び出し関数を全部同じ名前にしてしまっても安全でしょうか?

フォームが5個あるとして、別々の呼び出し関数を作るのは名前を憶えれないどうせ
呼び出し時には
標準モジュール側で
受け取る変数名 = FormName.doModal(引数1,引数2)
みたいにするので別にdoModalにこだわりませんでが
フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか?
0672デフォルトの名無しさん (スッップ Sdb3-Or7w)
垢版 |
2023/01/11(水) 11:07:44.33ID:ESDkH7B7d
>>670
標準モジュールに宣言するPublic関数とは違って
ユーザーフォームに宣言するPublic関数はユーザーフォーム名.XXXのような記載をして呼び出すので同名の関数でも構わない
(XXX単独では呼べない)
0674デフォルトの名無しさん (スップ Sdb3-5JHk)
垢版 |
2023/01/11(水) 12:42:00.54ID:R7jAcCIud
>>670

> みたいにするので別にdoModalにこだわりませんでが
> フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか?

頭にshowをつけてユニークな名前にすることは個人的にはよくある。
initializeはつけたことないけどユニークな名前なら平気なんじゃないかな。ただVBA側で用意されている名前に酷似してしまうから避けるけど。
0675670 (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/11(水) 14:39:04.35ID:UjJptVS80
>>672
そうですよね。自信持って決まった名前のやつ使い回します。
>>673
見る習慣なかったですが見ないと理解は深まらないやつですねこれは。
>>674
予約語とぶつからないよう気を付けます。

グローバル変数のやりとりなくしたら右上×ボタン閉じでエラーが出る原因が突き止められなくて苦労しました。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
Me.Hide
End If
End Sub
右上×ボタンで閉じるとShowの次の行に制御は戻るのに、モジュールレベルの変数は
値をクリアされてしまうのですね。
とりあえずグローバルのやりとりは卒業できました。ありがとうございました。
0676デフォルトの名無しさん (ワッチョイ 5b19-bgKu)
垢版 |
2023/01/11(水) 23:25:55.84ID:DN2jjrph0
オブジェクト指向では
多態性を覚えて初めてその恩恵を実感すると思う。
0677デフォルトの名無しさん (ワッチョイ 5b66-tb1I)
垢版 |
2023/01/12(木) 01:03:37.94ID:kydlVtmO0
>>676
多態性とは…
プログラムの経験が浅いとイマイチ具体例が出て来なくてモヤモヤっとした状態から抜け出せませんね。
VBAはオブジェクトは作れないけど、元々作ってあるオブジェクトの利用は出来るんですよね?多分
as objectとされるものは大体、オブジェクト名.プロパティ名とかオブジェクト名.メソッド名みたいなの持ってますよね。

継承というのは、Range.InsertとRange.EntireRow.Insertみたいな親クラスのメソッドを
引き継いでる子クラスみたいなことなのでしょうか。
今の経験量ではどれだけリファレンスサイトを読んでもピンときません。
残念ですし、アドバイスを活かせず申し訳ないです。

オブジェクト指向と非オブジェクト指向の境目がわかるようになるまで深入りしないようにしようと思っています。
0679デフォルトの名無しさん (ワッチョイ 5b19-bgKu)
垢版 |
2023/01/12(木) 05:03:44.98ID:DzjvAA7t0
そうね
Object指向の概念はVBAだけやってれば
人によっては一生身につかないかもね。

この手の参考資料が一番多いのはやっぱりJavaになるのかなぁ。
VBAと文法が近いVB.Netでもあまり見かけないね。アレもIObject指向言語なのに。
0680デフォルトの名無しさん (スッップ Sdb3-kOMB)
垢版 |
2023/01/12(木) 14:53:02.95ID:HTRe+k0wd
>>679
お前には見つけられないだけ
0681デフォルトの名無しさん (ワッチョイ 2b46-K0Bq)
垢版 |
2023/01/12(木) 15:01:56.40ID:LJFXYIUK0
vbscriptでwin32apiのキーダウンを使おうとしているのですが、
キーダウンは検知できるのですが、標準入力に押したキーが入ってしまいます。
この標準入力を削除することはできないでしょうか
もしくはキーダウンが標準入力にならないようにする方法はないでしょうか
0684デフォルトの名無しさん (ブーイモ MM4b-AA8W)
垢版 |
2023/01/12(木) 21:50:28.71ID:YA4W27ZxM
でもパワーシェルはダブルクリックで起動できないって
ところが
0685デフォルトの名無しさん (スッップ Sdb3-kOMB)
垢版 |
2023/01/12(木) 22:14:31.34ID:HTRe+k0wd
>>684
馬鹿にはできないだけだぞ
0688デフォルトの名無しさん (ワッチョイ 5b19-bgKu)
垢版 |
2023/01/12(木) 22:27:21.44ID:DzjvAA7t0
>>680
そうなんかな?
VBAのデザインパターン扱ってる本なんて見たことないけど
0689デフォルトの名無しさん (スッップ Sdb3-kOMB)
垢版 |
2023/01/12(木) 22:47:57.75ID:HTRe+k0wd
>>688
VB.NETの方
0690デフォルトの名無しさん (ブーイモ MM4b-AA8W)
垢版 |
2023/01/13(金) 05:15:26.60ID:60PuJGcsM
パワーシェルでやってみます
0691デフォルトの名無しさん (アウアウウー Sa85-AyIk)
垢版 |
2023/01/13(金) 06:09:05.42ID:pezk+gKQa
オブジェクト指向の典型は、Ruby on Rails。
派生ばっかり

おまけにRubyは、メソッドチェーンで関数型プログラミングもできる

ウェブ開発では、ガチガチのオブジェクト指向で、
テキスト処理では、Linux のパイプラインみたいなメソッドチェーンの両方を使うから、
あらゆるデザインパターンの宝庫

おまけに、Stack Overflow によると米国年収ではトップ。
Rubyは9.3万ドル、多くの言語は6.5万ドル、PHPは5万ドル
0692デフォルトの名無しさん (ワッチョイ 5b19-bgKu)
垢版 |
2023/01/13(金) 09:12:44.75ID:ZL1fQ8g50
>>691
でも
日本ではVBAより平均年収安いって記事
前このスレに挙げられてたよね
0694デフォルトの名無しさん (アウアウウー Sa91-487d)
垢版 |
2023/01/14(土) 15:05:35.60ID:Ta24dazVa
そんな馬鹿な
0706デフォルトの名無しさん (アウアウウー Sa91-487d)
垢版 |
2023/01/16(月) 11:57:18.10ID:ySDGoo7La
スレタイ読めないのか
0717デフォルトの名無しさん (ワッチョイ c63c-w88e)
垢版 |
2023/01/17(火) 22:29:25.09ID:lscX0yJQ0
vbaとribbon customuiって直接関係ありませんが、マクロをribbon customuiから利用を考えています。
ネットやyoutube等調べて試したのですが、タブやボタンが表示されずに困っています。
また2007と2010でxmlnsの名前空間指定方法が異なることも理解しているつもりです。
2010以降を想定しています。
環境:Excel for Microsoft 365 MSO (バージョン 2212 ビルド 16.0.15928.20196) 64 ビット
ribbon_test.xlsm(zip)
_rels, customUI, docProps, xl, [Content_Types].xml

マクロ
Module1.main

_relsの.rels
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships";>
<Relationship Id="rId3" Type="(略)" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="(略)" Target="xl/workbook.xml"/>
<Relationship Id="rId4" Type="(略)" Target="docProps/app.xml"/>
<Relationship Id="rId5" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility"; Target="customUI/customUI14.xml"/>
</Relationships>

customUIのcustomUI14.xml
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui";>
<ribbon><tabs>
<tab id="CustomTab" label="Custom Tab">
<group id="customGroup" label="Custom Group"><button id="member" visible="true" label="Custom Button" size="large" imageMso="HappyFace" onAction="Module1.main" /></group>
</tab>
</tabs></ribbon>
</customUI>

ご教授お願いいたしますm(_ _;)m
0720デフォルトの名無しさん (JP 0H6d-w88e)
垢版 |
2023/01/19(木) 07:37:02.75ID:40XBuhhWH
VBA知らないのですけど
シート間やブック間の情報のやり取りには
コールバック関数みたい非同期処理をしてるんですか?
0722デフォルトの名無しさん (JP 0H6d-w88e)
垢版 |
2023/01/19(木) 08:01:59.36ID:40XBuhhWH
書き換えや取得してる間はコードの実行は待機し
書き換え、取得が済んでからコードを再開するってことなのでしょうか?
0724デフォルトの名無しさん (ワッチョイ cd79-sA4L)
垢版 |
2023/01/19(木) 08:33:41.90ID:WQbdwelX0
コールバックではなくCOMという概念で実際のところプロセス間通信している
VBAの場合多分インプロセスなので他の手段より有利
シートやブックに対してコールバックする処理ってあったっけかな
0729デフォルトの名無しさん (ワッチョイ 595f-+wCe)
垢版 |
2023/01/19(木) 19:42:15.97ID:Dvqs9CAA0
例外処理の悩みなんだけど、
普段、オプションでエラーをクラスで停止するように設定している
その状態でクラスでErr.Raiseすると、標準モジュールでOnErrorGotoステートメントで受け取れないけど皆さんはどうしてるんですかね?
0732720 (JP 0H6d-w88e)
垢版 |
2023/01/19(木) 21:58:24.97ID:40XBuhhWH
みなさん、ありがとうです
>>727様、ありがとうです

web系はユーザーの待機ストレスをなくすために
コールバックを多用しますけれど
事務系は一つの処理が終わってから次の処理に移るって
なんだかそんな感じを受けました

ありがとうございました
0734デフォルトの名無しさん (ワッチョイ 9568-3JZN)
垢版 |
2023/01/19(木) 23:05:36.09ID:eT7lxKel0
外部取り込みデータでcsvファイルを
QueryTablesメソッドを使用して、TextFileColumnDataTypesを文字列では取り込むとデータの後ろに半角スペースが入ります。
これなぜでしょうか?
標準で取り込むと半角スペースが入らないです。

やりたいのが数値などを文字列で取り込んだ時に、先頭の0を表示させて、E形式で表示されてる数値を全部表示させたいです。

今、文字列形式で取り込むと必ず全データの後ろに半角スペースが入ります。半角スペースが入らないように取り込みたいです
0736デフォルトの名無しさん (ワッチョイ 4a10-JJzj)
垢版 |
2023/01/20(金) 01:33:26.94ID:W1xzt6Zf0
シートが2つあって、片方非表示にしようとしたら、最低1個は表示しろって怒られるの何で?
非表示にする1行手前でデバッグプリント取ったけど、間違いなく2つとも表示されている。
単体で実行すると問題ないが、新規ブック作ってシートを2つに増やしてからやるとエラーになる。
DoEvents入れても駄目、On Error Resume Next入れてもエラーで止まる。
ワケわからん。
0741デフォルトの名無しさん (ワッチョイ 9568-3JZN)
垢版 |
2023/01/20(金) 07:00:14.46ID:Q4AfyMd20
>>735
半角スペース入ってないです
アクセスから抜いてきたデータなんですけど、何回やっても入るんですよね
0742デフォルトの名無しさん (ワッチョイ 7e19-9FUj)
垢版 |
2023/01/20(金) 07:46:13.25ID:z8VJTXTl0
もうACCESSに直接ADO接続して値取って来たら?
0743デフォルトの名無しさん (スッップ Sdea-f6s+)
垢版 |
2023/01/20(金) 08:00:52.80ID:ayeW68tCd
質問者がよくわからない現象だから質問してくるんだろうけどそういう人の質問だといまいち状況がつかみにくいから
オリジナルでなくてもいいから現象が再現するサンプルコードでも提供すれば解決しやすいのにね
そういう事ができない人多いよね
0745デフォルトの名無しさん (スップー Sdca-3JZN)
垢版 |
2023/01/20(金) 09:37:46.21ID:phBDDUUBd
>>742
結局、全部にトリムすることにしましたわ
0746デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/21(土) 02:59:07.37ID:ZfbTiSBFr
総合スレからこちらに誘導されて来ました
マクロ記録は使えるけどVBAは使えないのに。。

【1 Windows10】
【2 Excel2019 】
【3 いいえ】
【4 否】

普段横書きで印刷をしているシートを
月一回の報告資料のみ、範囲を変えて縦書きにして印刷する必要があります

それでマクロ記録を使って印刷範囲を絞り込んで縦書きにして印刷をするボタンを作成してみたのですが、問題は印刷範囲の最終行が毎回変わるのでその最終行に合わせた範囲指定にするにはどうしたら良いでしょうか?
CTRL+↓を記録は出来ないみたいだし。。

印刷範囲の最終行に透明な「※」でも打ち込んでそこまでを印刷というような事は出来ますでしょうか?
0747デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/21(土) 04:22:08.36ID:H5hcEaoi0
>>746
印刷範囲(ActiveSheet.PageSetup.PrintArea)が設定されている前提で
dim printrange, lastRow

' 現在の印刷範囲のRangeオブジェクトを得る
set printrange = ActiveSheet.Range(ActiveSheet.PageSetup.PrintArea)
' 実際の最終行を得る
lastRow = ActiveSheet.Cells(printrange.Row, printrange.Column).SpecialCells(xlLastCell).Row
'最終行を変更したRangeオブジェクトのAddressを印刷範囲に設定する
ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range(ActiveSheet.Cells(printrange.Row, printrange.Column), ActiveSheet.Cells(lastRow, printrange.Column + printrange.Columns.Count - 1)).Address
0748デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/21(土) 07:02:51.83ID:liCBEODDH
>>746
これを機にVBA使いになりましょう
そんな難しくないですよ

まずはダミーデータと
マクロで記録したコードを張ってみてもらえますか?
0749デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/21(土) 09:23:02.19ID:DWiRZY6Xr
>>747-748

ありがとうございます

マクロ記録はボタンを押すだけなので簡単ですが
VBAになると一気に難易度が。。

1980年代のDOSの前のBASICはちょろっとやってたので本気出せばなんとかなるかもですが

分かりやすい書籍、動画、講座とかありますかね?
0750デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/21(土) 10:59:00.69ID:Zr2lAE610
そも、縦書きと横書きという独特の言い回しが相手には伝わりにくい
あいうえお ← 横書き

い  ← 縦書き  普通に読んでればこう捉える




でもそれでは無くて、帳票の状態が普通はA4横長で印刷してるものを、月イチではA4縦長で印刷したいとかなのか
ほんとうに文字ごとタテ並びにしてしまいたいのか  後者なら敷居が相当高いけど
しかし、初めて白状した状況だと相当の高齢者が毎月なんらかの帳票を印刷するのに苦心している様子からして
自治会の会計資料だのそういう方面だとも考えられる
自分でサンプルを提示するのが困難なら、どっかのサイトで似たような状況を探って画像検索でもしてみて「こういうのをこうしたい」と書かないと伝わり難い
自治会用のExcelサンプルなんかゴロゴロ転がってるし、それを参考にするとか流用するとか  見立て違いなら失敬
   しかし、単に「印刷範囲」をその都度指定するだけで簡単に解決するような質問のような気もしてる
0751デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/21(土) 12:20:46.74ID:qZakY6uUr
>>750
打ち出しているのは零細企業の売上報告資料です
経営陣と上司が高齢者なので今まで長年使い続けて来た会議資料のフォーマットは原則何も変えてはならないという前提の作業です

売上が得意先の売上高順に並べられている資料で
右側に売上の内訳があります

単純にA4縦をA4横にして印刷するわけでは無くて列の削除が2列必要になり、その列を単純に削除すると関数が埋められてるのでエラー表示になるので、手作業だと毎回大変だったので、マクロ記録を使って自動的に印刷出来るようにしました

ところが一つだけ上手く行かなかったのが
今回の印刷範囲の指定でした

簡単な例を作成中なので後でアップします
0755デフォルトの名無しさん (ワッチョイ 43ad-zVY0)
垢版 |
2023/01/21(土) 13:46:51.08ID:3LuUMb1z0
ほんとは
>>752
の上の表と下の表の間に担当者別の売上集計表があるので毎月、列の削除は行えずに右側の内訳をスライドして値複写して整形する必要が有ります

この作業が地味に面倒なのでマクロ記録で自動化しました
0756デフォルトの名無しさん (ワッチョイ 6f19-1gWY)
垢版 |
2023/01/21(土) 14:05:07.15ID:hYuLYDCi0
>>749
Console 0,25,0,1とかで始まるやつか
文法こそ同じような部分はあるけど全くの別物だぞ
0759デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/21(土) 14:55:21.95ID:Zr2lAE610
レコード総数どのくらいか判らんけど、回答待ってる間に別シートにコピーして並べ替えするだけで済むような
いくら零細だからって業務用途なら自社内で解決できるレベルに収めておかないと、引き継ぎに難儀するような
 ↓こういうのを参考にしてじぶんで懸命に制作してもいいかも知らんけど
https://forest.watch.impress.co.jp/docs/serial/exceltips/1306514.html  単なる受け売りじゃ応用利かなくなるだろうし
0762デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 16:26:39.90ID:qZakY6uUr
>>754
改めて考えたらこの横向きの印刷は苦労して無かったんだった
>>752
のシートを新規シートにコピーしてから不要列を削除してプリントするマクロ記録で出来るので

問題は
>>753
の印刷です

この表の下に2月分の納品予定、3月分の納品予定、4月、5月と続いていくので最終行を指定する事は出来なくて
印刷したい範囲はあくまでも当月の1月分までなので
0763デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/21(土) 16:46:59.18ID:H5hcEaoi0
>>752-754
1 日次を人間が更新 or 印刷
2 1を元に週次で印刷
3 1を元に月次で印刷
ということなら、シートをあらかじめ上記3つに分ける方向で考えた方がいいんじゃないかね
ご存知かもしれないけど「Excel VBA やりたい事」でぐぐれば大抵の事は出てくるよ
取り急ぎ動的な範囲選択の記述の仕方とか判ればVBAの文法とかあやふやでも全然いけそうだけど
0765デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/21(土) 16:58:34.85ID:Zr2lAE610
何度も聞くけど「印刷範囲」の設定ってどうやってる? マウスで印刷したい範囲をドラッグ選択して印刷範囲に設定するだけなんだけど?
月ごとに微妙に行数が増減するから用紙からはみ出るとかの懸念? Excelの初歩の初歩のような気がしてきた
0766デフォルトの名無しさん (ワッチョイ 7ff0-j5s0)
垢版 |
2023/01/21(土) 17:11:10.91ID:pNicHJvH0
必要な情報を配列に入れ込んで
それで新しいシートを作り直したらどうでしょう?

新しいシートは手作業でフォーマットしておくか
VBAで印刷範囲の列数行数を取得して
配列から取り出してセルに代入するとか

誤って元データを失わないように
シートの追加削除はあまりどうなんだろうって気がします
0767デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 17:26:56.30ID:qZakY6uUr
>>765
いや、だから関数とか印刷範囲の設定で済まないので悩んでいるわけです
それだけで済むならマクロ記録で終了です

不要範囲の削除で関数の連携が無くなるから
数値コピーしたり
手動の整形を伴うのと

毎月売上の会社は一定じゃないし
0768デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 17:34:58.85ID:qZakY6uUr
>>766
元データを失わないように
元データからマクロで読み込んでコピーファイルを作成して、そこで作業を行ってから終了時にマクロで元データに書き込むようにはしています。。

売上の最新情報は他の人と共有しているファイルになるので、これもコピーファイルを作成してからデータを新しいシートにコピペして、パワークエリを使ってそのファイルから読み込んで毎度自動更新するようにしています

定形フォーマット(シート)を使ってVBAで行数を決められると確かに良いですね
0769デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 17:41:46.80ID:zrHjWBn6M
>>768
なんか頭のハゲた人がいっぱいいそうな会社だなあ。
0770デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/21(土) 17:57:20.75ID:Zr2lAE610
ダメだこりゃ 行や列の非表示とかも知らなそう
たぶん「書き間違えました」とか訂正あるんだろうけど、>作業を行ってから終了時にマクロで元データに書き込むようにはしています
これはやっちゃいけない最たるものじゃないのか? 元ファイルと作業ファイルは一方通行にしとかなきゃ、戻してどうすんだ
40年前にBASIC触った世代? なんかアタマでっかちで実務に向いてない 縦書き横書きすら誤用してるのにいっちょまえな用語駆使しようとして伝わらない
すまんがサジ投げる 君らに任せた
0773デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 18:11:05.02ID:qZakY6uUr
>>770
他の優秀な方は皆さん理解出来るのに一人だけトンチンカンなVBAスレにいてはいけないレベルのような

列の非表示をしたらその下の担当者別の列まで非表示になるから
範囲指定や非常時でなんとかなるレベルじゃないでしょ

じゃあなたにVBAの質問して答えられるのかな?
0775デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 18:47:58.93ID:zrHjWBn6M
>>774
このハゲ!
                 
      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
0777デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 18:51:29.36ID:zrHjWBn6M
(爆)
0778デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 18:51:32.42ID:qZakY6uUr
ほんとは表示がなんでも良ければ
>>752
こんな内容はパワークエリとパワーピボットで、何もしなくても常に最新データに書き換えられるんだけどな。。
といつも思いながらEXCELの加工してます
0779デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/21(土) 19:34:50.38ID:rwfwwGNyd
零細企業だからこんな馬鹿しか雇えないのかね
0781デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/21(土) 20:00:29.29ID:liCBEODDH
>>752
連想配列、多次元配列を使えば、好きな項目を紐づけでき
表示も好きなようにできるので楽だと思います
一度覚えたら重宝しますのでいつか学んでみたらいかがでしょう?
VBAの学習はネットで十分ですし是非

例えばシートから顧客名を取得して
顧客名をキーワードにして、製品名、単価、数量、担当者名を配列に格納し
単価×売上高の多い順に配列をソートして、配列から必要な表示項目だけセルに代入する
そうやって処理すれば担当者別であれ製品別であれ好きなように表示できます
その後、罫線処理をして、最後に幅調整をしてあげればって思います
0782デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/21(土) 20:08:19.63ID:rwfwwGNyd
>>780
あまりにも馬鹿過ぎるから馬鹿と指摘しているのだが
こんなのしか雇えないから零細企業のままなのか、零細企業だからこんなの雇っちゃうのか
0784デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:12:17.60ID:HFKnvzRq0
今度は言い掛かりを始めた馬鹿
0786デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:18:33.47ID:HFKnvzRq0
馬鹿の質問はそもそも馬鹿が考えることだから問題解決へのアプローチが間違えている
というか端的に言えば馬鹿だから馬鹿な発想しかできないから解決方法がややこしくなり何倍も何十倍も時間が必要になる
0788デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:23:35.37ID:HFKnvzRq0
逃げた
0789デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/21(土) 20:23:44.73ID:qZakY6uUr
>>781
ありがとうございます

他は全てワンボタンで済んだので
あと表示だけが手動なので
そのために時間掛ける価値があるかどうテンピンに掛けながら
でもこういうのは嫌いじゃ無いので学んでみます
0791デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/21(土) 20:34:39.84ID:liCBEODDH
>>789
なんかスレッドが熱いですけど気にせずがんばってください

配列はデータベースみたいなものなのでエクセルと相性がいいんです
とても便利ですので是非がんばってください
0792デフォルトの名無しさん (スッップ Sd1f-88l+)
垢版 |
2023/01/21(土) 21:38:19.62ID:ALAIHDfad
煽るヤカラに反応してるとスレが荒れていつも回答してくれる人も敬遠しちゃうぞ
月別のレイアウト範囲を決めるなら参考の表なら
開始は「月売上高表」の文字列が入っている行
最後は「納品予定」の文字列が入っている行を見つけて最後の金額が入ってる行を取得すれば>>747のコードが流用できるんじゃないの
0796デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/21(土) 22:31:20.27ID:liCBEODDH
>>789
もし嫌じゃないのなら才能というか適性あります
VBAから入ってある程度楽しいなって思えたら
pythonとかjava、C#とかやってみたらいいと思います
0797デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 04:34:19.88ID:K9eOTOpDr
>>792
その印刷したい最後の行≒「途中の行」の場合はどのように指定したら良いんでしょうか?

売上先の数が毎月一定では無いので印刷したい最後の行が毎月変わってしまうのです

「売上最終行」「売上最終列」
「納品最終行」「納品最終列」
を透明な文字で埋め込んで認識させるのが良いのかなと
0802デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/22(日) 06:55:38.90ID:5nd4WcY/0
>>797
どれを印刷したいのかよくわからんけど >>752-753 なら納品予定の列を見て空になった行のひとつ上、>>754 なら得意先名の列を見て合計となって行までを印刷すりゃいいんじゃないの?
って>>792は言ってるんだが?
そもそも
> 印刷したい最後の行≒「途中の行」
とか意味不明すぎる
0805デフォャ泣gの名無しさb (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 07:12:25.00ID:hOwNbSAHr
毎日
752のシートを毎日作成していて
そのシートを元に
753や754のような印刷結果としたいのです

上の画像が失敗したのは
確かに非表示で済むような画像になってしまいましたが
実際には列の非常時を使うと印刷したい列まで隠れてしまうので非表示は使えません
0808デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 07:28:29.54ID:hOwNbSAHr
実際の数字は販売管理ソフトから吐き出したデータをパワークエリとパワーピボットによってリアルタイムにデータを見ることは出来ています
その他の付随情報をEXCELで管理していて、そのEXCELデータと販売管理ソフトが正しいかどうかのチェックもそのEXCELファイルで行っています
0809デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 07:32:21.84ID:hOwNbSAHr
20年前からパワークエリやパワーピボットが存在していれば、その結果を元に報告資料を作っていたんだろうけど、存在しない時代に手動で作成していたのでそれに合わせる事に苦労してるということです
0812デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 09:17:23.76ID:Hx9JKMaXr
>>810
ありがとう
行か列を任意を指定してキーワードを見つければ良いんですね


>>811
BASIC自体を知ってるのでは無く
その当時、マイコンを買って
雑誌の記事を見て自分用にカスタマイズしただけ
主にカセットテープから20分くらいLoadしてゼビウスとかやってた
0814デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/22(日) 13:00:42.70ID:vQS42HbD0
連想配列のコレクションを使いたいんだが、個別の要素が書き換えられない。
書き換えると全要素が書き関わってしまう???
これはどうしたらいい?
Set Yukkuri = New Dictionary '「Microsoft Scripting Runtime」を参照設定
Dim timeline As New Collection
Yukkuri.Add "Name", "霊夢"
Yukkuri.Add "serif", "霊夢です"
timeline.Add Yukkuri
'セリフを追加する
timeline.Add Yukkuri
Debug.Print "--before--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")
'追加したセリフの変更
timeline.Item(2)("Name") = "魔理沙"
timeline.Item(2)("serif") = "魔理沙だぜ"
Debug.Print "--after--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")

実行すると
--before--
霊夢 霊夢です
霊夢 霊夢です
--after--
魔理沙 魔理沙だぜ ←こっちも書き換わってる
魔理沙 魔理沙だぜ
0815デフォルトの名無しさん (スッップ Sd1f-88l+)
垢版 |
2023/01/22(日) 13:08:27.56ID:CdSwQQ4cd
>>806
自分が何もできないから100%他人任せにしてるような割りに態度が少し横柄なんじゃねと思わなくもないんだよね
少なくとも>>806の月別の表が何か月分も同じシートにあるのであれば
・シートを2つコピーして>>807用の2つのシートを作る
・それぞれのシートで1行目から最終行まで検索する
・月別の始点はA列?の「月売上高表」の文字列が含まれる行
 終点は次の月の「月売上高表」の文字列が含まれる行の-1
 ※ただし最終月は翌月の文字列が見つからないので最終行でよい
これをもとにそれぞれのシートの行を非表示にしたり、列を非表示にして
印刷範囲決めたらいいだけなんじゃないの
ここまでの説明はマクロで可能
俺はやる気のあるコードを見せてくれたりする人には付き合う気はあるけど
100%他人任せには構ってられないから以降は他の人が回答してくれることを祈るわ
0817デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/22(日) 13:29:43.69ID:5nd4WcY/0
>>814
そりゃ連想配列の実体は1つしか作ってないから書き換えたら変わるわな
いまいちどういう結果を期待してるのかよくわからんけど片方が変わって欲しくないなら
timeline.Add Yukkuri
Dim Yukkuri1 As New Dictionary
Dim Key As Variant
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
のように中身をコピーして作る
0818デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/22(日) 14:10:36.46ID:3khvOI6Qd
また零細企業の馬鹿が粘着してるのか
しつこい馬鹿は迷惑
0819デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 15:30:30.53ID:DNm1kf3fH
>>749
Sub main()
Dim arr() As Variant
arr = dataArr

End Sub

Function dataArr() As Variant()
Dim cel() As Long
cel(0) = Cells(Rows.Count, 1).End(xlUp).Row
cel(1) = Cells(1, Columns.Count).End(xlToLeft).Column

Dim rw, col As Long
Dim datas() As Variant
ReDim datas(cel(0), cel(1))

For rw = 0 To cel(0) - 2
For cl = 0 To cel(1) - 1
datas(rw, cl) = Cells(rw + 2, cl + 1)
Next cl
Next rw
dataArr = datas
End Function
0820デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 15:30:46.23ID:DNm1kf3fH
これでmain関数の中のarrにすべてのデータが取り込めた
arr(0,1)はヨソバ〇カメラ
arr(1,5)は80000

2行目に、み〇なのさくら屋、売上金額、納品予定
3行目のE列に納品予定合計額を表示させたければ
cells(2,1)=arr(1,1)
cells(2,2)=arr(1,2)
cells(2,3)=arr(1,4)
と指定して表示し
合計はVBA内でfor分で合計値を算出するか
シートに転記後にworksheetFunction.sum()で合計を算出して表示すればどうでしょう

製品テーブル(略称含む)や顧客テーブル(略称含む)をシートで作って置ければ
さらに楽にできると思います
0821デフォルトの名無しさん (ワッチョイ 43ad-88l+)
垢版 |
2023/01/22(日) 16:01:00.37ID:PpuiymMq0
>>820
それはデータ取り込みのためのVBAですね?

印刷のための範囲指定は

Sub tes()
'
' tes Macro
'

'
Range("A1:I69").Select ←ここの部分を書き換えると
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup


    途中省略

End With
Application.PrintCommunication = True
End Sub
0822デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 16:06:26.01ID:DNm1kf3fH
>>821
どの程度の大きさのデータを印刷したいのかわからないですが
サンプル程度のデータ量でしたら配列を使って取り込みと出力をして
印刷設定はエクセル側で行えば十分かと思いましたけど
それではあまり役立ちませんか?
0823デフォルトの名無しさん (スッップ Sd1f-a63L)
垢版 |
2023/01/22(日) 16:17:39.68ID:SHbanA0Dd
>>822
印刷設定をEXCEL側とは?
毎回手動で設定して印刷という話ですか?
データ取り込みは苦労していないというか既に自動化は諦めてるので

未納品状態から納品済に変わった段階で
下から消して上に書き込む作業を行わないとならんので。。
0824デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 16:24:05.21ID:DNm1kf3fH
>>823
よく理解してなくてすみません
rangeの範囲指定だけ指定できたらOKなのでしょうか?

例えば、
Range("A1:I69")
printArea="$A$1:&i%69"
を指定したいってことでしょうか?
0825デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/22(日) 16:27:55.16ID:xRK/d49A0
>>819
1オリジンのRangeオブジェクトと0オリジンの配列のやり取りはどうやっても混乱するから
セルを配列に取り込む場合は「array = Range(範囲).Value」のようにRange.Valueで取り込んだ方がいいよ
これでRangeで指定した範囲の値が1オリジンの2次元配列として取得できる
逆に配列をセルに書き戻す場合も、Rangeとarrayの要素数が同じなら「Range(範囲).Value = array」で済む
これはVBAでシートを配列で扱う場合の常識だと思うので一応
0826デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/22(日) 16:35:26.12ID:DLw6jtzT0
おいおいおいおいw まーたハナシが変わって来てるw ま、それがこの人の個性っちゃあ個性だけどw
パワークエリやパワーピボットを駆使してマクロで一発で取り込むのは出来てる とか、大法螺だったんだな

彼の目的はただ一つ  会議資料として用紙の横書き印刷と縦書き印刷をしてる、その縦書き印刷を自動化したい その一点
横書きとか縦書きとかは彼の独特な表現だからA4ヨコ印刷・A4タテ印刷に脳内変換してくれ A版かB版か、4か3かは定かでは無いが、まあそんな風

で、彼のとっ散らかった説明・解説をまとめると以下の通りだ
販売管理ソフトで売り上げを管理 → 売上データをExcelに吐き出し(もしくはExcelから引っ張る) → そのデータをパワークエリやパワーピボットを
駆使して集計し、会議用資料のテンプレートに落とし込む https://i.imgur.com/MNy37BM.jpghttps://i.imgur.com/JUP2t7B.jpg これはヨコ印刷で
問題無し https://i.imgur.com/LhkqS7p.jpg これのタテ印刷に苦心してる
何故なら :
  1] 二列不要だから削除したいが、削除すると「関数」が無くなって違算(エラー)←??
  2] 毎月行数の増減があるので最終行が決まらない ←必要なら「※」なり「最終行」なりを手入力してでもマクロを走らせるのの役に立てたい←???
  3] 画像には無いが、この他に担当者別売上の表がある ←最初の画像の赤丸位置?それとも上下の表の中間?
  4] これが1Sheetに1年12ヶ月分タテに並んでいるので各月自在に印刷するのは大変
ざっくりとこんな感じ
0827デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 16:36:20.85ID:zZKA7THFr
>>824
印刷したい印刷範囲の右下が毎回変わるので

例えばそこに
「END」という透明文字を書き入れておく場合にはどのような記述となりますか?

これさえ出来れば自分のやりたい事が出来そうです
0828デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 16:43:18.47ID:zZKA7THFr
>>826
同じ取引に対してデータ元が2つ有り

パワークエリとパワーピボットで自動取込をするのは販売管理ソフトのデータからが1つ目
こちらは自動的に取り込まれていて
簡単に得意先別、担当者別、商品別の合計や詳細は把握出来る


EXCELで報告資料を作る元データは、他の人が社内共有用に作っているEXCELファイルから

この2つのデータが合っている事を確認する必要もある


最初の質問から有りとあらゆる事を書き出すなんて無理だよ

後から話が違うと言われようが
説明するために簡便化した資料でやってるんだし
てゆーかあなたはVBAの技術は無いんだから無理に話に加わらなくても良いよ
0829デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/22(日) 16:47:09.62ID:DLw6jtzT0
で、それはVBAで出来るならそれでもいいけど、普通の機能でも十分賄える作業
範囲に名前を付けて(例えば01y とか01t とか)印刷時にページ設定のダイアログにその名前を入れて印刷するだけ
(もしくは、名前ボックスで選択して[印刷範囲に設定]でもいい ソッチのが楽かも)
範囲が重複しても名前付けは出来るんだし、せっかくの機能を使わない手は無い
11月に成ったら11yや11tを入れてやるだけで広範囲のうちそこだけをプレビューしてくれる
範囲が増減するってなら Offset使った範囲にしとけば行が増えても対応してくれる その名前付けを上手にできるかどうかがカギ
0830デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 16:50:46.58ID:zZKA7THFr
販売管理ソフトに全ての詳細情報を付加する機能が無いから、会社に必要な付随情報をEXCELで付与して管理させている

だから一つの取引に対して2つデータが存在してる
0831デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 16:53:25.56ID:DNm1kf3fH
>>827
Sub main()
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(2, 2)) '①

ActiveSheet.PageSetup.PrintArea = rng.Address
End Sub

みたいな感じで、①を都度指定したらできませんか?
0836デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 17:04:15.06ID:DNm1kf3fH
>>827
最終行列を取得して範囲指定するのなら
cells(rowscount,1).end(xlup).row
cells(1,columns.count).end(xltoleft).column
で最終行列を所得できます

キーワードを使った場合、
cells.find('end')でオブジェクトを取得しますけど
他のセルにキーワードが紛れていたら終わりますので非推奨かもですね

キーワードを最終セルにするというのなら
findを使って最終セルを取得して範囲指定に利用できそうですね
0838デフォルトの名無しさん (ワッチョイ 53da-Jpma)
垢版 |
2023/01/22(日) 17:06:29.53ID:DLw6jtzT0
そもそもが、全体のデータをどう扱うかのイメージが出来ていない
都度継ぎ接ぎだらけの思い付き・間違ったインスピレーションで作業しているだけ システムの九龍城砦を築いてるようなもの
毎月最終行に「最終行」って手入力することが自動化の助けに成ると思うならそうしてみりゃいい
その手間の時間で印刷終わってる 何月がいちばん上の月か知らんが、年度途中の月、7月とか8月でもそれで動作するシステム組めるのか?
ボタンを12ヶ並べるつもり? 年度途中の月を印刷するためにひとつのボタンで解決させるには、もっと苦労を重ねるけど?
プログラムを書くためにExcel使ってるんじゃ無い 楽するために使ってんだ  
0841デフォルトの名無しさん (JP 0Hc7-j5s0)
垢版 |
2023/01/22(日) 17:10:50.88ID:DNm1kf3fH
>>839
いえいえ、こちらこそ要領が悪くてすみません
findでキーワードを検索して、該当セルを取得したら
そのセルが何行目何列目なのかを取得できますので
それを>>821の範囲に利用してみたらいけるかもですね
0842デフォルトの名無しさん (ワッチョイ 43ad-a63L)
垢版 |
2023/01/22(日) 17:11:53.93ID:PpuiymMq0
>>838
月に一回だけ
ENDと入れるだけで
一ヶ月にかなりの時間を節約出切るのが分からない??

行や列を挿入するだけだから
ENDと入れるのは一回だけ

なんなら前月のシートを使えば、それすら要らなくなる

ほんとお前は性格悪いね
0844デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 17:26:29.02ID:zZKA7THFr
縦向きえんど
横向きえんど

この文字を透明色で埋めておけば良いかな
上書き出来ないようにセルを保護しておく?

そうすりゃ毎月何も設定しなくても良くなりますね
0845デフォルトの名無しさん (ワッチョイ 7f74-Njuq)
垢版 |
2023/01/22(日) 18:32:47.51ID:Km84h4+z0
>>844
そんなことより「ハゲでも分かるExcel VBA入門」という本を読めばいい。
分かりやすくてすぐ上達。
0849デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/22(日) 18:51:11.61ID:vQS42HbD0
>>817
レスサンクスです。
ということはYukkuriが100人いたら、
Dim Yukkuri?? As New Dictionaryを100行要るてことになるてこと?
timeline.Add Yukkuriのところで、timelineが使ってるメモリが追加でアロケートされ、
そこに連想配列が追加されるていう動きにならんのかね?
それか連想配列の実体をコピーできるとか。
0854デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/22(日) 19:20:26.34ID:5nd4WcY/0
>>849
だから何をやりたいのかいまいちよくわからんけど100個コピー作りたいならループで回せばいいだけ
新規のDictionaryはループ中で確保する
timeline.Add Yukkuri
Dim N As Long
Dim Yukkuri1 As Dictionary
Dim Key As Variant
For N = 1 To 100
Set Yukkuri1 = New Dictionary
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
Next
0855デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 19:55:07.24ID:pQuel4xur
>>853
2つにそれぞれ意味があるから良いだろ
ソフトは客先に納品書や請求書をプリントしたり、EXCELは社内の全ての管理をしやすいように情報付与、そしてその2つが在る事でどちらのかの入力ミスを防げる
この仕組みで会社が儲かってるんだからケチ付けられんわ俺も
0856デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/22(日) 20:04:58.23ID:xRK/d49A0
>>814は恐らく連想配列が欲しいわけではなく、
javascriptやpowershellにあるような動的なプロパティが欲しいんだろう
VBAではそういう便利なものはないので基本ノードデータにジャグ配列を使って
ノードの先頭にプロパティ名に相当するタグを付けていった方が記述量的にも混乱が少ないと思われる
0857デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/22(日) 20:21:20.32ID:xRK/d49A0
>>814の意図を汲んだデータをジャグ配列のノードで表記すると恐らく以下の様になる
dim timeline_root
timeline_root = array("timeline" _
,array("Yukkuri", array("Name", "霊夢"), array("serif", "霊夢です")) _
,array("Yukkuri", array("Name", "魔理沙"), array("serif", "魔理沙だぜ")) _
)
配列の要素0に必ずタグ名が入るようにすれば、HTMLのDOMツリーのように一環した探索ロジックが組める
0858デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/22(日) 23:17:51.08ID:vQS42HbD0
>>857
やろうとしてることは、ゆっくりムービーメーカー4の定義ファイルをVBAで編集すること。
ゆっくりムービーメーカー4の定義ファイルはJSONになってて、
VBAではJSONが使えないから、誰かが組んだVBA-JSONを使うと
JSONがVBAのコレクションやディクショナリー(連想配列)で作られたデータになる。
そこなかで、セリフが定義されてるを連想配列を複製してセリフ書き換えてくてことをやってるんだけど、
VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
ただ、試行錯誤していたら
一旦同じ連想配列をaddしたものを作って、
それをjsonにして、またそのjsonを連想配列に戻してやれば、
別メモリが割り当てられた連想配列が出来上がった。
そのあとは個別に要素を書き換えられる。
javascriptとかは
.配列.push({...Yukkuri[0]})
とかやれば行けたんだが、VBAは無理なのか。
0859デフォルトの名無しさん (ワッチョイ cfda-sGmE)
垢版 |
2023/01/23(月) 00:40:24.32ID:g2a0jdgy0
こんどはjavaかw
できるならそっちでやれよ
0860デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/23(月) 02:01:54.23ID:8zQTqYpQ0
>>858
処理対象がjsonなら最初からそう書けばいいのに
いくつか手段はあるけどVBAでやろうとすると結局面倒だし特に理由が無いなら他を検討してみては
VBA-JSONの使い方の話なら俺は知らん
0861デフォルトの名無しさん (アウアウウー Saa7-DmZS)
垢版 |
2023/01/23(月) 05:38:36.83ID:yam+YnrUa
>Excelと販管ソフトに、個々に入力してるから安心
もし、この2つが異なった値なら、システムが破綻しているw

オリジナルは1つのみ!
そして、バックアップ用のコピーを持つべき!
0862861 (アウアウウー Saa7-DmZS)
垢版 |
2023/01/23(月) 05:45:42.29ID:yam+YnrUa
例えば、銀行のシステムでも、2つのオリジナルを持たない。
3人が同時入力して、多数決でオリジナルを決める

サーバーでもそう。偶数個のノードにしない。
1:1, 2:2 などの分断が起きて、どちらがオリジナルか判断できなくなる

必ず、奇数個で判断して、オリジナルを決める。
そして、オリジナルのバックアップ用のコピーを持つ

そうしないと、システムが破綻する
0863デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 05:47:16.87ID:7g54Dlndr
>>861
知らんがな
システムの良い悪いの判定なんてお前らに求めて無い事を察しなさい

俺以外の社員含めて理不尽な事をやってるなと思いながら仕事をしてるんだから

70歳の引退予定の上司に言ってくれ

そいつがいなくなればスッキリさせる
0864デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 05:53:04.08ID:7g54Dlndr
>>862
例えば3人で販管ソフトに入力したとして
その販管ソフトの仕様により、会社の必要とする情報を持てない場合はどうするんですか?
そもそも一人しか人的資源が無い場合はどうするんですか?
0867デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 07:03:42.58ID:7g54Dlndr
>>865

変数を定義して範囲の右下のキーワードを拾って

ActiveSheet.PageSetup.PrintArea =

のところにその定義した変数を入れてやるという理屈で合ってますよね?

後はフサフサでも分かるEXCEL VBAの本が到着してから勉強します
0869デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/23(月) 08:50:43.95ID:rT2ytU3d0
>>858
> VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
> 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
だから新規に作ってコピーしなよって書いたのに...
コードまで書いたのに無視するんならもうさじ投げるわ
0870デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/23(月) 09:10:22.34ID:+DM8uE5N0
>>869
新規に作るていっても、複雑な連想配列の塊をどうやって作る?
サンプルはたかだなNameとserifしかキーがないけど、
キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
しかもその構造が動的だったらお手上げ。
0872デフォルトの名無しさん (アウアウウー Saa7-WyxW)
垢版 |
2023/01/23(月) 09:32:51.14ID:QZVEgBP9a
>>870
> キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
> しかもその構造が動的だったらお手上げ。
お前にはお手上げなだけだろw
>>854 に "Name" とか "serif" なんて書いてない、キーを動的に取得してコピーしてることすら読み取れないレベルなら諦めたほうがいいと思うよ
0878デフォルトの名無しさん (ワッチョイ cfda-88l+)
垢版 |
2023/01/23(月) 18:35:46.07ID:2y89VdvQ0
先週までは問題なく動いていたブックを開くと、
すぐExcelが落ちて回復が入ってしまい、
回復ブックを開くと、プロシージャがモジュールごと丸々なくなっていた。

ワークシートのクエリーやテーブル、計算式やグラフは壊れていなさそうで、
新たにモジュールを作り直して
バックアップを取っていたプロシージャの記述をそのまま貼り付けたら、
一応、VBAも動くようになった。

過去には新たなモジュールすら作れなくなったことも。
0887デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/23(月) 21:54:37.35ID:c8LJJic2H
>>886
10年ぐらい前、変数を日本語名にしてると一切動かなくなるってバグがあったな
確かACCESSだった
変数を日本語名にしても、あまりいい事はないと思う

>>878
あと、この方法はあまり良くない
一度壊れたブックは、内部的にゴミデータが残っている可能性がある
使いまわすと、そことバッティングする可能性がある
新規ファイルを作り、シートを一つずつコピー、vbaもテキスト単位でコピー、
といった感じで作り直した方が良い
めんどくさいけど、やっておいた方がいいよとは言っておく
0889デフォルトの名無しさん (ワッチョイ d3ce-Jpma)
垢版 |
2023/01/24(火) 03:50:07.79ID:ID+MP23U0
ドイツのプログラマーが、Selenium、WebDriverを使わずにEdgeを直接制御するクラスを作ってるのを見つけた
試したらとりあえず動いたんで報告
https://www.codeproject.com/Tips/5307593/Automate-Chrome-Edge-using-VBA

動作テスト中にはまった点を書いておくと、裏でEdgeのアップデートチェックが走ってるとエラーが出て止まる
これだけ殺せば動く
taskkill /f /im msedge.exe
taskkill /f /im MicrosoftEdgeUpdate.exe

あと、Edgeの起動オプションを
--remote-debugging-pipe --disable-automation
に変えるとコマンドラインウィンドウが出なくなる
0898デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/26(木) 07:02:58.95ID:QQqpl7Qdr
質問です

VBAを使ってこのスレの人にアンケートを取りたい

皆さんは文系ですか?理系ですか?
もともとプログラミング出来る人ですか?
それとも経理とか必要に迫られて覚えた方ですか?
0905デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 09:03:16.60ID:N0DN9EFmd
皆さんはお仕事何されてますか
事務をやって三年、仕事を楽にするために始めたExcelVBAは人並みに身についた気がしますが
ただの事務では給与が足りずプログラマに転向するには経験が浅いのです
0906デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/26(木) 09:11:16.84ID:NYppQtUx0
エクセルのvbaエディタ?がすごくつかいずらくて、
vsCodeでvbaが記述できるxvbaというツールを利用しようと試みています。
ですが、
エクセルで書かれたvbaの日本語文字が、vsCodeで読み込むと文字化けしてしまいます。
おそらく、エクセルの方のエディタがUTF-8ではないのかと思いますが。
このあたり、経験されているかた。どのように対処されていますでしょうか?
どうぞアドバイスください。
0912デフォルトの名無しさん (ブーイモ MM7f-PvGG)
垢版 |
2023/01/26(木) 12:32:00.38ID:Y5eC8vQ8M
>>902
エラーにするってのがよくわからんが
個人的にはc=a+b以降をしたのようにする。

If vartype(a) = vbstring or vartype(b) = vbstring Then
Debug.print "エラー"
Else
c= a + b
Debug.print c
End If

End Sub

>>908
a=1 と直接書いてるけど本当は
a=どっかのセルの値にしたいんじゃね?
で、そのセルには数値以外が入ってる可能性があるから
文字列ならエラーにしたいんじゃないかと。

>>909
文字列に変換するstr関数を使いたかったんじゃね?
書き方間違えてるから謎の言語になってるけど。
0913デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/26(木) 12:41:55.63ID:NYppQtUx0
Transposeで作る配列の
一番最初の要素の添字は0じゃなくて、1であってます?
0915デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/26(木) 12:55:07.08ID:jr7Apji9H
>>908
単純にコードのミスを検出したいだけなんです
変数名を間違えた場合の保険程度のつもりなんです

>>909
すいません
別言語触ってて何もかも間違えました
変数宣言dim a as stringのつもりでした

Sub foo()

Dim a As String
Dim b As String
Dim c As String

a = 1
b = 2
c = a + b

End Sub
0916デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 13:02:48.18ID:bIyafktir
>>915
それなら素直にlongで宣言するべきでしょ
変数名間違えた時の保険って、紛らわし変数名にするなって話だし
変数名間違えたときのための保険って言い出したら何も出来ないじゃん
じゃあその「変数名間違ってたときの確認のためのコードの」変数名が間違ってたらどうするの?
その確認のための変数名確認のためのコードをつけるのか?
それが間違ってたら?
確認のための変数名確認のための変数名確認のためのコードをやるの?
って話になる
0917デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/26(木) 13:11:07.62ID:jr7Apji9H
>>916
逆で、文字列を数値として使ってしまった場合に検出したい
単にタイポ時の保険としてエラーが起こってほしいってだけだよ
vbaに無いなら仕方ない、そういう言語なんだなってだけで
別にそこには期待しないよ
0918デフォルトの名無しさん (スップ Sd1f-88l+)
垢版 |
2023/01/26(木) 13:21:15.99ID:UvNszdC2d
少し上にいた大量にレスしてた奴みたいなおかしな質問者もいるし
適当に質問しても回答者が頑張ってくれるだろみたいな考えの質問者が多すぎなんだよ
0921デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 13:35:53.75ID:bIyafktir
>>917
あのさぁ、自分の説明が下手くそなくせにできないのは他人のせい、言語のせいにするのはよくないぞ
単にタイプミスって言っても自分がコード書くときにミスしないようにしたいのか、使う際にinputBox等で入力させるときにミスをなくしたいのかで全然違うだろ
エスパーじゃないんだから質問するならもっと具体的にしろよ
0924デフォルトの名無しさん (スップ Sd1f-88l+)
垢版 |
2023/01/26(木) 14:50:16.50ID:UvNszdC2d
ExcelVBAは型に対する考慮が緩いから正直期待にそえる回答はないと思うよ
例えば変数名の先頭に型を付与するようなルール決めてもタイプミスって言葉で許されるなら破綻するだけだしね
0925デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 14:52:16.71ID:bIyafktir
>>923
だから、最後までちゃんとかけや
それはinputBoxを格納する変数の話だろ
そんな話はしてないわ
色々な具体例があって様々な解決策があるのに、なんにも具体的な話を出さずに抽象的に話しして、一部に対してだけ反論してお前は馬鹿か?
0927デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 14:58:44.32ID:bIyafktir
つーか
「単純にコードのミスを検出したいだけなんです
変数名を間違えた場合の保険程度のつもりなんです」
本当にこれだけだったら先頭にOption Explicitつけて似たような変数宣言するな、で終わる話だよな
さすがにOption Explicitをつけてない人はいないだろうからそんな超初歩的な事はありえないと思ってるけど
0933デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 16:54:33.47ID:N0DN9EFmd
IF Not Isnumeric( a + b ) then c = a + b
とか
c = a & b
とかの雑魚コードでも教えておけばよかったのに
0939デフォルトの名無しさん (ワンミングク MM9f-gSeq)
垢版 |
2023/01/26(木) 19:12:37.90ID:CIVBTG9eM
零細企業のアホみたいな奴に答えてやろうなんて思うから荒れる
助けてで始まる質問する奴や、頭が悪いのに自分はできるみたいに思っておかしな質問をする奴は無視するのが一番
0943デフォルトの名無しさん (スッププ Sd1f-88l+)
垢版 |
2023/01/26(木) 20:00:51.10ID:BIrRkdsHd
相手にしたくないならほっておけばいいんだから無駄なレス書いて荒らすなよ

>>926
サンプル書けばわかると思うけど例えば下のようなコードは最後の数値型に数値以外の代入のみエラーとなるからコーディングミスしないように注意するしかないという話
Dim a As String
Dim b As Long
a = "a" '文字の"a"
a = 1 '文字の"1"
b = "1" '数字の1
b = "a" '変換エラー

>>928
そういう話じゃないと思うぞ
0944デフォルトの名無しさん (ワッチョイ 6f19-1gWY)
垢版 |
2023/01/26(木) 20:10:49.10ID:omfXV+oL0
キチンとString型を宣言しているなら確か
+は文字列連結の意味になるんじゃなかったっけ?
であれば前のレスで言ってた人がいたけど
- 0とか*0とかすればエラーになるんじゃないかな?

逆にSQLとかで文字列を数値で扱いたい場合は
*0とか-0とかにすると暗黙の変換で数値にしてくれる。

VBAでは型宣言は絶対だけど、
VBSみたいにスカラー変数を使う場合は
VBAみたいな型指定の型宣言が出来ないんで少し戸惑うかもね。

でもここはVBAのスレなので、
基本的に型宣言は絶対だと思っていいと思うよ。
0948デフォルトの名無しさん (ワッチョイ 332f-DmZS)
垢版 |
2023/01/27(金) 02:03:03.20ID:sVJGpHK80
>>944
> - 0とか*0とかすればエラーになるんじゃないかな?
暗黙の型変換がある以上、数値として認識できる文字列が入ってたらエラーになるとは限らん
VBAは型宣言はあるけど、Variant型と暗黙の変換があるから、絶対とまでは言えないのだよ

>>947
イミディエイトウィンドウの内容なんて書き換えできるからな
釣りじゃないってんならちゃんと詳しい環境かいてみ
0951デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/27(金) 09:27:20.18ID:JeWwXD830
VBAはあまり書かなくて理解足らないのは承知しているが、

配列に0から200の値を書き込むサンプル

これは、型があわないとアラートが返ってきます。
ダメな理由を教えてください。

Sub test()
Dim arrs As Variant
Dim i As Long
For i = 0 To 200
arrs(i) = i
Next i
End Sub
0953デフォルトの名無しさん (ワッチョイ d3ce-Jpma)
垢版 |
2023/01/27(金) 09:50:45.30ID:Gy/KHy720
>>951
Variant型は便利だけどVBAでは取り扱いが初心者には難しい方だと思う
昨日も変数の型のことで荒れてたけど、できるだけ適切な型を指定した方がバグになりにくい

そのまま動くようにするなら
Sub test()
  Dim arrs() As Variant
  ReDim arrs(200)
  Dim i As Long
  For i = 0 To 200
    arrs(i) = i
  Next i
End Sub

俺が推奨したい書き方は
Const arr_max = 200
Sub test()
  Dim arrs(arr_max) As Long
  Dim i As Long
  For i = 0 To arr_max
    arrs(i) = i
  Next i
End Sub
0959デフォルトの名無しさん (アウアウウー Saa7-sGmE)
垢版 |
2023/01/27(金) 15:35:27.15ID:nAK+7/AUa
0から200だと201回繰り返すのも注意
0960デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/27(金) 16:29:58.00ID:JeWwXD830
>>953
200個の要素数が確定されている場合ですかね。
将来配列の要素数が変わることがわかる場合、
どうなりますか。

うーん。
VBAで配列操作するより、セル関数でデータを加工していった方が早いし、
分かりやすい気がしてきた。
0961デフォルトの名無しさん (スッップ Sd1f-88l+)
垢版 |
2023/01/27(金) 17:27:12.70ID:HtuDNqBEd
>>960
VB(VBA)の場合は配列の再定義するためのRedimというのが用意されている
Dim a(0 to 200) as long
Redim Preserve a(0 to 1000)
とすることで0から200までの値を保証して0から1000までの配列に拡張ができる
まあ正解なんて1つじゃないんだから自分にしっくりくる作り方でいいと思うけどね

あと細かいようだけど>>955の「for (var i=0; i<200; i++) {」は
VBの質問に合わせるなら「i<=200」が正しいんじゃない?
0962デフォルトの名無しさん (スプッッ Sd1f-aTb4)
垢版 |
2023/01/27(金) 17:38:42.59ID:EY8clDJJd
>>960
DimRedimは先に回答した人がいるから

>VBAで配列操作するより、セル関数でデータを加工していった方が早いし、
>分かりやすい気がしてきた。

用途にもよるが分かりやすさとしては間違いなくそう
VBA分からないやつでもどんな操作をしているか分かるのはでかいし
特異なケースのテストもわりと少ない手間で試せる

データの成形入れ替え並び替えは全部関数でやって
そうすると関数の参照先シートを変更する度に重くなるから
マクロでは関数が入ったブックの呼び出しと
操作するデータを参照先シートにコピペする作業を任せる

こんなやり方もあり
一応配列格納のほうがいちいちセルの読み取りしない分速いことは速いが
VBAで書き出す手間とエラーチェックの手間と
仕事ならそれを誰かに引き継ぐことを考えると…って感じ
0963デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/27(金) 17:55:20.59ID:JeWwXD830
ありがとうございます。
そうですね。「i<=200」が正しいです。

要素数をいちいち定義したり再定義しないといけないのは
ちょっと不便ですね。自分でも他の方法ないか調べてみます。



データとして直接見えるというのが、セル関数の良さですね。
VBAの配列だと中のデータ見るのに手間かかる。


参考になりました。みなさんありがとうございました。
0969デフォルトの名無しさん (ワッチョイ 3619-GWjr)
垢版 |
2023/01/28(土) 06:32:52.50ID:hxz/by/q0
>>963
まぁScripting.DictionaryかCollectionでも使えば?
二次元配列的な使い方をしたいならついでにクラスのお勉強もしておけばいい。
他にもRecordsetを使うという手もある。
0971デフォルトの名無しさん (オッペケ Sr3b-O9ZV)
垢版 |
2023/01/28(土) 07:56:23.07ID:mBQ16TA8r
愛される零細おじさんでつ

自分の業務をEXCELでメニュー作ってボタン一つで飛ぶようにしてるんですが
例えばEXCELにみずほ銀行のアイコンを貼り付けて押せばみずほ銀行のEB画面に飛んだり
売掛金回収ならボタン押せば売掛金管理のファイルを読み込んだり
流石に他のソフトを起ち上げたりはVBAでも無理ですよね?
おっPythonとかなら出来るんですか?
0973デフォルトの名無しさん (ワッチョイ 3619-GWjr)
垢版 |
2023/01/28(土) 08:01:55.27ID:hxz/by/q0
まーた
RUBY信者の成りすましか・・・
0978デフォルトの名無しさん (オッペケ Sr3b-O9ZV)
垢版 |
2023/01/28(土) 10:37:54.23ID:mBQ16TA8r
あ、書き方が悪かったか

愛される零細おじさんでつ

自分の業務をEXCELでメニュー作ってボタン一つで飛ぶようにしてるんですが
例えばEXCELにみずほ銀行のアイコンを貼り付けて押せばみずほ銀行のEB画面に飛んだり
売掛金回収ならボタン押せば売掛金管理のファイルを読み込んだり

以上はハイパーリンクやマクロ記録を使って実現出来てる
売掛金管理ファイルを呼び出した後は、更新ボタンを押すことでパワークエリを使った集計も実現出来てる(更新ボタンを押さたくても更新させる事は出来るがあえて更新前の数値を確認するためにそのようにしてる)

流石に他のソフトを起ち上げたりはVBAでも無理ですよね?
おっPythonとかなら出来るんですか?
0979デフォルトの名無しさん (オッペケ Sr3b-O9ZV)
垢版 |
2023/01/28(土) 10:41:20.97ID:mBQ16TA8r
要するに販売管理のパッケージソフトや会計のパッケージソフトを起動させて全自動を追求したくなったという質問です

例えばEPSONの会計ソフトなら定番の資料は自動的に出力出来るのは知ってるが、今使ってるのは毎回、手作業でボタン押さないと出力出来ないんだよね
0980デフォルトの名無しさん (ワッチョイ 5fda-2biX)
垢版 |
2023/01/28(土) 10:57:57.78ID:/lutP43W0
ファイルの意味判ってンのか? 基本のキが欠落してるような
そして、そんな奴が改悪し続けてるExcel Book 数年後に後任に引き継がれて「なんだよ、これ」に成り果てる
そもそも、上司に了解得ているのか?社内のコンプラどうなってんだ おれがコンプラか 社内規定の意味でのコンプラだが
0989デフォルトの名無しさん (ワッチョイ 0b01-hj3w)
垢版 |
2023/01/28(土) 12:03:14.15ID:NqcfPhRT0
>>987
EPSONの会計ソフトの話だろ
> 例えばEPSONの会計ソフトなら定番の資料は自動的に出力出来るのは知ってるが、今使ってるのは毎回、手作業でボタン押さないと出力出来ないんだよね
そもそもExcelのボタンの話ならそのボタンに紐づいてるルーチン呼び出せばいいだけだし
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 89日 22時間 30分 23秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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