◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:Excel VBA 質問スレ Part78 ->画像>18枚  
動画、画像抽出    || 
この掲示板へ   
類似スレ   
掲示板一覧  人気スレ  動画人気順 
 このスレへの固定リンク: http://5chb.net/r/tech/1667104996/ ヒント: http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
 !extend:checked:vvvvv:1000:512 
 !extend:checked:vvvvv:1000:512 
 ↑同じ内容を3行貼り付けること   
 ExcelのVBAに関する質問スレ 
 コード書き込みや作成依頼もOK   
 次スレは
>>980 が立てること 
 無理なら細かく安価指定   
 ※前スレ 
 Excel VBA 質問スレ Part77  
http://2chb.net/r/tech/1658009255/     - 
 VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured 
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured 
 3行貼り付けても 
 1行目は本物の呪文 
 とりあえず建てたよ。 
 初心者はなんで自分の能力でできないことをやりたがるんだろうね 
 そりゃ自分でできることだけやってても伸びないからじゃね 
 >>5   子供と一緒で自分の能力でできることを知らないからじゃない? 
  出来なかったことがやれるように成ったらうれしかろ? 次のステップは踏みたいじゃん 階段途中で足止め食うよりは 
 https://chie-pctr.c.yimg.jp/dk/iwiz-chie/que-13121424663?w=999&h=999&up=0   前スレの最後の質問は、ログっぽさ出そうと苦労しても出力が一瞬で終わってガッカリすると思う 
 よっぽどひつこいloopとかさせて延々と処理し続けるコード書くなんてのも無駄の極みだし 
 出力に遅延処理させる? Excel上ではとっくに結果出てるのにログっぽい画面ではダラダラ出力し続けさせる? 
 うん、悪くない 関係無いが、マトリックスのOPの象徴をマトリックス・コード デジタル・レインとか呼ぶらしい 今更知った 
 >>5   それ以前に使うソフト間違ってねえか? 
 てのばかりだしね。 
 出来ること出来ないことの判断がさ。 
  >>5   そもそも自分の能力で出来るならこのスレに来ないし 
  >>5   判断すらできないし、それを指摘する人もまわりにいないんでしょ 
  自分でできない処理をやりたいと考えるだけならいいが 
 しばらく前からそういう層は増えてる 黎明期のような、積極的に見知らぬ世界に飛び込もうって勢いじゃなく 
 まあ興味ある質問ならこたえるし 
 質問です。 
 >>15   無理 
 時間のかかってる部分にDoEventsを入れるしかないし、スピードは落ちる 
  >>16   なるほど、やはり無理なnですね 
 諦めがつきました。ありがとうございます。 
  >>15   作り方によるが、長くかかる処理がLoop回数が多いようなパターンであれば   
 1.長くかかる処理の中に、ある条件が成り立てば以降の処理をしないで終了するようにしておく 
 2.Doeventsを長くかかる処理の中に入れる 
 3.ボタンを押したときに上の条件が成り立つようにする   
 なら一応それっぽくできるかも 
  win10 office2019 
 俺も3回読み直したけど何がしたいかわからんかったわ 
 初期化って何?Erase?? 
 >>19   たとえばUBound2とかいう名前で、空だったら-1を返す、そうでなければ 
 UBoundの値を返すといった関数を作って、渡した人にはUBound2を使ってもらうとか。   
 あるいは空に戻すときに、ReDim ar(-1 to -1) as longのようにするとか。 
 実際には空の配列ではないけれど、 UBound(ar) < 0 のような形で判定できる。 
  自分は基本的に動的配列は
>>23 の様な初期化条件をきめておいて操作してるわ 
 使ったことなくて今ためしたけど 
 if (not ar) = -1 then 
 の様な式で要素数未定義が判断できるけど 
 こんなことしても事故のもとだからなぁ 
 >>23   ありがとうございます。 
 UBound2というのは変数でしょうか?    
https://qiita.com/Q11Q/items/a2d61545d9e5c4e15f22   渡すというのは完成したマクロファイルを他のパソコンで動かすという意味です。   
 dim Ary() 
 Ary = Array() 
 この初期化がとても便利で空のままUBound(Ary)してもエラーになりません。 
 その代償でVariant型にせざるを得ないのが気になってしまって。   
 -1 to 1という初期化方法はいいですね。 
 とても参考になるレスをありがとうございました。 
 これで失礼致します。 
  VBAはだいたいの機能が備わってるけどこういう基本的なところが抜けてたりするから 
 >>19 はよくある疑問なんだけどそういう機能が無いので
>>24 みたいな非公式なTipsが編み出されたりしてるわけで 
 無理やり異常が出ないようにコードを組めてもその際の実行結果って正しい結果になっているのかな? 
 裏技を使わないと書けないコードってのは元の設計が間違ってる 
 >>29   理由が解ってれば辻褄が合わせでもいいんじゃない? 
 個人的にはエラーの原因が解らないからと例外処理で済ますのが一番ダメだと思う 
  VBAを1から覚えるなら「エクセルの神髄」というサイトで勉強すれば早いですか? 
 https://excel-ubara.com/excelvba1/     楽天RSSをりようして、株価データを取得・操作のため学ぼうと思っています。 
 >>33   そういう目的達成のためなら 
 金出して人に作ってもらうのが一番早い 
  >>34   最終的には頼みますけど、自分である程度は理解していなと 
 ちょっとしたカスタマイズや金額の相場がわからないので 
 まずは自分でやってみようと思いました。 
 最低限の知識くらいはと。 
  あー、昔そういうの作った気がすると思ってほっくり返したら出てきたわ 
  確か全銘柄から値が急激に上下した銘柄をピックアップしてた   
 知ってると思うけどHPからとってくるデータは基本時間遅らせてるからデイトレするなら役に立たないよ 
 昔はどっかの証券会社でAPIかなんか提供してたはず、今はわからんす   
 真髄とかってチラ見だけどサイト良いね、ただ印刷とかグラフとか重要じゃないものも等価に説明してるんで 
 自分にとって必要なものから覚えていった方が良いかも 
 >>36   たいがいのトレードアプリは素人が思いつくような機能は全部入ってるから、オーダーメイドやカスタマイズの必要なんかない 
 わざわざ作ってもらうのは金の無駄だし、今から勉強するのは時間の無駄 
  まぁそうなんどけどね 
 HP で公表している、明地式3点チャージ法だけやっておけば? 
 >>38   有料の奴って大抵VBAの部分って見せてないだろ 
 飯の種だし 
  Python で有名なYouTuber・キノコードは、 
 仮にMS OfficeでそれらしいことをするならVBA よりOfficeアドインの範疇なのでVBAではなくてC#やJavaScriptが基礎になると思う 
 >>37   一応念のため 
 この表は数秒おきに自動作成されるものでオリジナルの計算をしてる 
 シート名見ればわかるかもだけどVBAで出来ないわけじゃない   
 逆に
>>38 でも書かれているけど既存のチャートとかはもうあるんだからそれを使うのが良いと思う 
  板情報集計値は俺のしる限りどの証券会社も公表してないから自分でやる意味はあるかも 
 スレチと知っててこんなことも知ってるっよって自慢したいのでしょう 
 >>47   注意されたんで話やめたんだけど? 
 自分がボッチだからってスレチを冗長させるようなことはやめてくんないかな 
  ま、そういうこった 
 >>38   別に時間の無駄ってことはないだろ 
 そうやって他の人の真似して少しづつ勉強してくんだからよ 
  質問の回答でもなんでもないレスなら雑談スレにでもいけばいいものを 
 >>50   目的はトレード、手段の一つとして質問者が選んだのがVBA 
 VBAを勉強するのが目的ではないし、VBAは最適解でもない 
  >>52   そんな事全く書いてなくね?それはあなたの思い込みでしょ 
 そもそも「まずは自分でやってみようと思いました。最低限の知識くらいはと。」って書いてあるんだから 
 あなたが判断することではない   
 つまり質問だけに答えてればいいんだから余計な事は言う必要ないし、答えたくなければ黙ってろカスってことね 
  別に厳格なルールはないけどな 
 他人に注意をするときには客観的によくよく吟味してからにしないと結局荒らすことになる 
 メソッドの後ろにスペースを入れると、引数候補が表示される時とされないときがあります。この違いはどのように考えれば良いでしょうか。 
 補完機能に期待した事ないや 
 >>57   > activeworkbook.closeでは出てきません。 
 普通に出るぞ 
 Microsoft(R) Excel(R) for  Microsoft 365 MSO (バージョン 2209 ビルド16.0.15629.20200) 64ビット 
  言葉の使い方として正しいのか知らんけど 
 webbrowserでSSL認証ってどうすればいい? 
 >>63   知らん 
 C#の環境があるならアドイン作ってVBAから呼び出せばいいじゃない 
  >>57   うろおぼえだけど、戻り値がどうなってるかによる 
 Worksheets.Addは明確にWorksheetsコレクションのAddメソッドのことなのでインテリセンスがちゃんと機能する 
 ActiveWorkbook.Closeは、ActiveWorkbookが確実にWorkbookオブジェクトを返す保証がないので、Closeメソッドのインテリセンスが機能しない 
 dim wkBook as Workbook 
 set wkBook=ActiveWorkbook 
 wkBook.Close  
 とでもすればインテリセンスは機能する 
  ExcelVBAからプログミング初めてそろそろ別言語が気になってるんだけど、どのくらいまで習得したら一区切りによさそう? 
 それで食べていくなら食べていけるだけの事を覚えるまでだし 
 別言語じゃないと出来ない事が出てきた時。 
 雇用形態による 
 >>66   できれば研修とか受けて短期間で集中して勉強するのがおすすめ 
 言語の習得に区切りとかはない、自分で納得するかどうか 
  >>66 だけど答えてくれた人ありがとう、結構臨機応変にって感じなのね 
  >>66   高速化して、オブジェクトの構成覚えて、イベントでなにか記述して 
 あとはifとfor、foreach、 
 これだけ使えたら大抵のことはできるだろうから、phpでも使ってみるといいと思う 
  クラスモジュールを使ってなにか面白いこと便利なことできないかなあ 
 実務ではクラスモジュールなんて殆ど使わないよ 
 一般事務ならそれこそvbaのみで十分だろ 
 >>77   そうだなぁ 
 きちんとクラスの特性とか多態性とか 
 基本的なことを押さえていれば 
 何となくこんなシチュエーションのときに使うって 
 分かると思うからその辺調べてみれば?   
 もっとも、VBAでクラスのこと説明してるとこ 
 あまりないから、JavaとかC#でクラスって 
 どんなもんかググれば大概出てくるんじゃないかなぁ   
 VBAのクラスはかなり制限あるし 
 その辺のこと興味持つようになったらボチボチ 
 他言語にも手を伸ばす時期だと思うよ 
 あと、「こんな使い方するんだ」ってのが 
 知りたければ「デザインパターン」でググってみればいい 
 これもなんかのヒントにはなるよ 
  Qiita, Zenn, Note, Wantedly、食べチョクなどは、Ruby on Rails。 
 >>81   他の全ての大手は普通にPHP・pythonを使っているのに、 
 「ごく一部の大手」だけがrubyを使っているのが現状   
 また、ruby信者は頭がおかしくこのような歪な布教活動を行う特徴がある 
 くれぐれも騙されないように 
  >>76   わかっただろ?統一教会みたいな連中に巻き込まれる 
  >>85   だからそういうこと書くと荒れるって言ってんだろ? 
 質問来たらちゃんと答えてるんだからほっとけよ 
  >>82   >>87   ありがとう、そういうが風潮あるとは知らず....... 
  >>88   言わねーとずっと続くのがいつもの流れだろ 
 ほっとくのが主義なら俺にも言うな 
  言語として最高かどうかは別として 
 VBA自体年寄り御用達の言語になっちまった感だからね 
 ラズパイの入門キットが尼で3000円で売ってるからRubyでサンプル動かしてLEDチカチカ楽しいよ 
 ほら、こうやってRuby、Rubyって 
 VBA + Selenium + Chrome で自動ログインをツールを作っています。  
 >>90   放っておけばっていうのはお前がコントロールしようとしている掲示板の脱線に対してだよ 
 放っておいても質問があれば勝手に戻るからさ、これ書くの2度目ね   
 そのことと俺がお前を放っておくのとは意味あいがぜーんぜん違うんだがわかる?まぁ解んなくてもいいけど 
 あと指図はするけど言われたくないんだよな? 
 ならその通りにしましょうかね 
  >>96   chromeの起動オプションに書き加える 
 使うのが自分だけなら手動で事前にchromeの設定を変えておくのが一番簡単 
  >>98   VBA+Seleniumで起動オプションの書き方はどうやればいいのでしょうか? 
 C#やPythonやJavaばかりでVBAの表記法が見つかりません。 
  間違ってrubyを学習してしまい、無駄な時間を過ごしてしまうことが忍びないのはわかる 
 別にruby推しでもかまわないけど関係ないスレでは自重しろとは思う 
 rubyキチガイが荒らしに来るからヘイトが凄い事になってる 
 GetOpenFilenameで開いたファイルのパスを返すFunctionを作ったのですが、戻り値を変数として利用する度にGetOpenFilenameメソッドが実行されてダイアログが開きます 
 >>107   Functionの外で保持しておく値なら 
 Public でなく Dim で宣言すればモジュール内でつかえる 
  >>107   コードも見てないから何とも言えないけど 
 初回のみって判定なら基本的に変数で管理するしかないと思うけどね 
 それとGetOpenFilenameがダイアログでファイル名(ファイルパス)を取得するための関数なら関数自体は何もせずに 
 GetOpenFilenameを2回目以降に呼ばないような変数管理が普通の方法じゃないかと思うよ   
 publicが気持ち悪いってのは関数や変数のスコープ管理がおかしいからだと思うから 
 それはそれで見直せばいいのでは 
  >>107   それってsubの中で 
 cells(1,1)=Function変数 
 cells(2,1)=Function変数 
 ってやってるからでしょ? 
 subの中でtempでも宣言して 
 temp=Function変数 
 cells(1,1)=temp 
 cells(2,1)=temp 
 ってやればいいんじゃない? 
  自分で納得できるコードが書けないのは経験が足りないだけかも 
 自分でそこんところをいろいろ考えてやるのが楽しいのに 
 >>115   お前が荒らしてるだけじゃん 
 全然荒れてないわ 
  >>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」をメインのプロシージャの方でローカル変数に格納するしかないですかね。 
  >>120   変数に入れるのが一般的だけど、どうしてもっていうならFunction全体を「OpenedFilePathが空白だったら」ってIfで囲ったらなんとかならん? 
  特に理由がない限り1つのプロシージャの機能はなるべく1つに限定したほうがいい 
 >>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 
  GetOpenFilenameでファイル選択しなかったときの返り値は 
 なんでstaticが出てこないんだよwww 
 >>125   なんでそんなすぐわかる嘘つくの?   
 Returns False if the user cancels the dialog box.  
https://learn.microsoft.com/en-us/office/vba/api/excel.application.getopenfilename     そもそもその仕様だと false というファイル名を返せないだろ、馬鹿すぎ 
  >>126   > なんでstaticが出てこないんだよwww 
 そんな汚い設計を勧めたくないから 
  >>127   うわ、ずっと間違えてた。これは申し訳ない   
 言い訳すると、pathをstringで宣言してる時、booleanのfalseが"false"に変換される 
 これがあってからずっと文字列が返ってきてると思いこんでいた 
 これは本当に申し訳ない、間違った情報でドヤッてしまった   
 Sub foo() 
 Dim path As String 
 path = Application.GetOpenFilename() 
 Debug.Print TypeName(path) 
 End Sub    
>>128   わかる 
  「Workbooks.Open」のようなコードだけだとActiveBookが変わって 
 本来操作したいブック以外を参照してしまう事故を防ぐためにも 
 自分も
>>123 のようなコードがいいと思うな 
 あとはVariantはなんにでも使えてしまうから戻り値もWorkbookがいいと思うけど 
 private変数で宣言するならファンクションである必要もなくなりそうではあるんだが 
 それは前後の流れ次第かね 
 >>117   楽しい・・・? 
 そうだね、VBAは弄ってて楽しい言語だね。 
 何でもお手軽に作れるしグラフィカルな部分が多いから 
 分かりやすいし。   
 お手軽と言えばJavaScript もそうかな。 
 逆にCOBOLとか何が楽しいのか俺には理解出来ない。 
  >>100   ありがとうございます。   
     Dim Driver As New Selenium.WebDriver     
     Driver.AddArgument "credentials_enable_service=False" 
     Driver.AddArgument "profile.password_manager_enabled=False"       
 「パスワードを保存しますか?」というダイアログが表示されてしまいます。   
 このダイアログが邪魔でしょうがないです。 
 何とか消したいのですが、コード間違っていますか? 
  Driver.SetPreference "credentials_enable_service", False 
 >>134   これも試しましたが、ダイアログが起動します、、、 
 うーん、困りました。 
     With Driver 
         .SetPreference "credentials_enable_service", False 
         .SetPreference "password_manager_enabled", False 
         .SetPreference "--password-store", basic 
  最悪、しょうがないので力業でWindows APIで座標指定で「×」をクリックします。 
 Map<String, Object> prefs = new HashMap<String, Object>(); 
 >>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 
  Dim prefs 
 >>142   ありがとうござます。試しましたがやはダイアログが表示されます、、、 
  driver.SetPreference "credentials_enable_service", False 
 Driver.SetPreference "credentials_enable_service", False 
 >>144  >>145   ダメでした。   
 VBA+Seleniumだと色々と制限がありそうですね。 
 Windows APIで強制クリックしかなさそうですね。 
  Driver.AddArgument "--password-store=basic" 
 >>147   ダメでした。   
 ただ、ページ遷移すると自動でダイアログが消えますので 
 初回ログイン時に出るのは結構目障りですけど、最悪諦めます。 
  >>148   結果的に消えるならいいじゃん 
 そこでボタンをクリックしないと動作が止まる、とかだったら困るけど、動けばいいんだよ   
 てか、オプション設定のタイミングが悪いんじゃないの?Chromeを起動する前に設定してる? 
  >>149   はい、してます。   
 試しにVBAで同じことを試していただければ100%再現できます。 
  >>133   マルチポスト、更に言語の違いすらわからない馬鹿は消えろ 
  マルチポストはどうかと思うが少なくともこっちのスレだと言語は合ってるだろ 
 https://xtech.nikkei.com/atcl/nxt/column/18/02246/110200002/    利用しているプログラミング言語 
 「あなたが現在使っているプログラミング言語は何ですか」という設問に対する回答の内訳。 
 最大3つ選択してもらった。回答数が10以上の言語を掲載   
 VBA頑張ってるじゃん 
 Rubyの倍やん 
  そりゃ母数が全然違うからな 
 >>153   これは結構意外な結果。 
 HTMLとCSSが思ったより低いね。 
 もっと意外だったのがSQLがランクインしていないこと。 
 「SQLはプログラミング言語じゃねーだろ」という意見も聞こえそうだけど、 
 それ言ったらHTMLだってプログラミング言語かと言えば怪しいよね。   
 iPhoneを開発するOvjective-C辺りはCに含まれるのかな? 
 でもそう考えるとSwift もランクインされていない。 
 最近はPython が主流なのかー。 
 まぁRubyはさして知るべし。 
  メインの言語がhtmlです!って人はちょっと・・・ 
 よく見るとTypeScriptが追い上げてるなぁ 
 Pythoの何がいいの?C#の方がよっぽどコードが綺麗。 
 VBAはバリバリ活躍してるけど、VBはもはや枯れた言語か。。 
 むしろVB(VB.NET以外)がランクインしてるのに驚いたわ 
 >>159   アホが書いたぐちゃぐちゃインデント見た事ないっしょ   
 インデントがそのまま機能に繋がるってのは、 
 もうこれだけでいいんじゃないかってぐらい見やすいんだよ 
  >>153   これ相当歪な集計だぞ 
 期間は2週間、プログラマーがたったの16%であとは経営者3%なんて混じってる 
  VBAでフォームからセルに入力できるフォームを作るときにテキストボックスとセルをcontrolsauceで連結するのが一般的ですか? 
 >>162   pythonマジでコードが気持ち悪いんだけど。 
  使わなきゃいいだけなのにあえて他言語の悪口を言うのはRuby厨か 
 >>163   プログラマー以外がプログラミングしちゃいけないわけじゃないし、別に歪じゃないだろ 
  歪というか、アンケートの対象はプログラマーのみではなさそうだな 
 VB.Netは確かにもうMicrosoft からも.NetCoreでは更新しませんよって宣言されてた気もするし、 
 vb.netとc#って 
 VBA は社員が使っている。一般人・アマチュア。 
 >>169   Pythonにあっという間に追い越され凋落が加速しているRubyざまあ 
  >>174   プロ用wwwwww 
 つまり金貰えなきゃRubyなんて使わんわ!ということ 
  でもどうだろ? 
 あー、まぁ旧VB6ならそうかもね 
 そういえばVBなんて言語あったなー(遠い目) 
 旧VBは結構な値段しただろ 
 ネットでサンプルコードを漁っていると配列の型を宣言するときに括弧を省いているのが多いけれどなんでだろう 
 >>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に入れておけば大体うまくいく 
 動的配列や静的配列を使うのもいいけど、めんどくさいだけだよ 
  sub hoge  
 >>183   ループを使って配列の要素を一つずつ埋めて行く場合は()付きで配列として宣言しなきゃダメじゃん? 
 だったら一括代入する場合も()付きで配列として宣言した方がわかりやすいかなあと思うんだよね 
  >>184   特にマズくない 
 最近は8GBぐらいメモリあるんだし多少食っても全然平気    
>>186   vba結構長いこと使ってきたけど、そんなコード書いたことないなぁ 
 ちょっと分からないわ 
  >>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」もそれに準じた方がわかりやすいのではと思うんだよね 
 超細かくて申し訳ないけれど 
  jscriptの配列をそのままvbscriptにしたら 
 >>188   これってのが 
 Dim EditArr() As Variant 
 なら、 
 Dim EditArr As Variant 
 でも動いてるようだが? 
 そのまま走らせたら両方ともそこ以外で実行時エラー出てるけど   
 さらに言えば、ReDimするなら(Option Explicit onでも)Dimすらなくても動いたような 
  >>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)) 
 だろうが同じって認識だわ 
 動的配列っていうのをわかりやすくするために()つけておくか、くらいの感じだと思ってる 
  >>184   別にマズくはないよ。 
 メモリ使ってたとしても使ってる変数が 
 みんなPrivateのものなら関数抜けた時点で解放されるし 
  【速報】上司「お前のことはExcelの印刷くらい信用している」→パワハラ 
    広告代理店・電報堂(本社・東京都足立区)に勤務する50代の部長が20代の部下にパワハラを繰り返し、 
 部下をうつによる休職に追い込んだとして民事訴訟を起こされていたことが22日分かった。 
  訴状によると部長は部下に対し日頃から「お前のことはExcelの印刷と同じくらい信用している」 
 という発言を繰り返しており、その結果「どれだけ仕事をしても信用が得られない」 
 と感じた部下は今年5月からうつの症状を発症するようになり、現在は休職しているという。 
  なお上司は取材に対し「信用していると言っただけなのになぜパワハラ扱いされるのか理解できない」 
 と述べた。    
http://2chb.net/r/curry/1663509806/   まあ言い方だろうな 
 兄が元刑務官だけど、昔に比べればブタ箱の飯はだいぶ香ばしい匂いになったみたいだよw 
 スタンフォード監獄実験で普通の人でもそういう仕事につくと凶暴になる実験あったな 
 >>207   実はアレはヤラセだったと関係者が暴露してる 
  神様たち 
 「作れない」と「作る意味ない」は違くないか 
 >>209   つくれないので別の方法を検討しましょう 
 作る意味があるケースもあるけど現状作れないし作れるようになりそうもないから議論してもしょうがない、はい次の方~ 
 他の言語でやってるとね~やっぱ欲しいなって思う場面が出てくるんだよね~ 
 まぁ一つ言えばこの一連の流れで
>>211 は頭一つ抜けて無能だね~ 
 >>214   やりたい理由なんていろんなケースであるからそれをいってもしかたないでしょう 
 自分だって他言語では使う事もあるしね 
  神様達、ありがとうございました 
 >>220   いや、無理無理 
 黙ってられない年寄りばかりだから。 
  神様達、よろしくお願いします 
 神様たち、すみませんでした。解決できました。ごめんなさい 
 >>218   出来ないことはないが 
 VBAでは過去の遺物、負の遺産として 
 使用が暗黙的に禁止されている。 
 どうしても使いたければ 
 VBA GOSUBでググれ 
  それサブルーチンだし関数内関数っていっていいの? 
 GOSUBはミートソースでも食べられないと教わりました 
 > VBA GOSUBでググれ 
 知ってる? 
 そもそもこれマウントでもなんでもなく単に間違えてるだけでしょ 
 GOSUBでも似たようなことできるけど○○できないとか制限あるよっていえばいいのに 
 高階関数のことならVBA関数では不可 
 >>232   君、韓国人みたいな発言してるよ 
 気をつけたほうが良いと思う 
  アドバイス頂けただけありがたいです。 
 >>236     class.propertyみたいな呼び出し方で 
 配列や、インスタンス代入変数を参照できたらいいなって思ったんです 
 function やsubを直接参照するのが気持ちよくなくて 
  >>237   特にない 
 365だけど、昔も今も普通に記録されるよ  
  >>238   vbaは化石だから色々と諦めるしかない 
  >>235   それ、朝鮮総連のマニュアルだよ。 
 「あなたは朝鮮人の可能性があると言って相手の反応を見ましょう」 
  >>224   それ、ちょっと思いついてネタ的に作ってみようかと思ったが 
 そもそもブロックレベルのスコープもたないVBAでやると大変なことになるだけだったわ 
  >>232   回答もできず 
 できることで負けてるから若さで勝ち誇りたいプライドもかわいそうだな 
 そのまま年取るなよ    
>>242   ある程度まとまったコードを例えば分岐のいくつかでやりたいとかの場合は有効かもしれんけどね 
  >>238   Class内にDictionaryなりCollectionなりをSetしておいてItemをため込み、 
 Property Getで取得することはできそうな気がする。。。   
 ごめん、検証してないし希望とは違うかもしれんけど。 
  複数行にまとめてVLOOKUP関数を埋め込みたいのでFormulaR1C1プロパティを使っているのですが、マジックナンバーを避けるために検索範囲や列番号を変数で表現すると一行がやたら長くなってしまいます 
 >>245   やたら長いとやらを貼らないと意味が分からない 
  >>245   長くなるというのがどういう状況かわからんけど、範囲をテーブル化して 
 構造化参照するとかListobjectで指定するとかは? 
  >>249   あーテーブル嫌がる人けっこう多いよねーw  
>>245 の件としてレスするけど、テーブル書式設定をクリアしてテーブルっぽく見せないってごまかしは置いてくとしてw 
 変数って書いてるからVBAコード内での一行なのだろうと仮定して、変数にすると長くなるのであれば変数名を短くするしかないかと。 
 多少なりともわかりやすくというなら列番号はEnum定義しておくとか。そのくらいかな。 
 的外れなレスだったらごめんね。 
  構造化参照も理解できない方たちが事務やってるの多いもんな 
 >>240   新旧の互換性を維持する系の言語は 
 いろいろ個性が強くなりますので 
 できないことはできないで教えていただけてすっきりです    
>>244   アドバイスありがとうございます 
 クラスモジュール内のプロシージャーをすべてprivateにして 
 各プロシージャーの処理結果をモジュール変数の参照のようにしたいのです 
 そうすれば多少は依存性が解消できて見通しよくなるような気がしてます 
 何かいい方法ないでしょうか? 
  >>239   ありがとうございます 
 何か自分の設定がおかしいのかもしれません 
 調べてみます 
  嫌いどころかデータ蓄積の入力用シートすら作ってない不思議な人達ばかりよ現場は。 
 すみません 
 >>252   クラス内のプロシージャを全てPrivateにして外部のモジュールから参照するのはしようと思えば出来る。 
  >>256   VBA 最終行 でググれ  
https://www.excel-ubara.com/excelvba1/EXCELVBA318.html     > シート2のA2からA列の最終行 
 なら 
 With Worksheets("シート2") 
 LastRow =.Cells(.Rows.Count, "A").End(xlUp).Row 
 End With 
  >>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 
 ちなみに代入元と代入先の行数を合わせる必要があるからそこは必要に応じて書き換えてね 
  >>257     dim cls as class1 
 set cls =new class1   
 cls.arry(0) 
 cls.dictionary("x")   
 みたいなことできますか? 
 プログラムはかなりできあがってきたんですが 
 出来るようなら書き換えたいです 
  神様の皆様、よろしくお願いします 
 >>261   VBE上でローカルウィンドウを出してF8を繰り返し押せば確認できるよ 
  >>261   自分でシミュレーションしてみ   
 ' i = 9 から...   
 ar(i)=i ' ar(9)=9 
 redim preserve ar(ubound(ar)+1) ' redim preserve ar(9+1) 
 redim preserve ar(ubound(ar)-1) ' redim preserve ar(10-1) 
  >>258-259     ありがとうございます 
 凄く助かります 
  >>262   >>263   ありがとうございます 
 例えば1万回は最終要素を削除できたけれど 
 10億回すると削除されない、もしくは最終要素以外を削除してしまう 
 という挙動はあり得ないのでしょうか?   
 言い換えてると 
 vbaの仕様として、ubound(ar)は配列の最終要素を参照しており 
 ubound(ar)-1は、最終要素の1つ手前を参照することを保証していると考えていいでしょうか? 
  >>265   良い。問題無い。   
 保証されないのはforeach 
 あれは順番が変わる事があるので、foreachで同じ事をやるのは絶対にNG 
  請求書をつくるとき取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってるんですが 
 ピボットテーブルの特定セルを参照する関数なかったっけ? 
 >>267   取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってる 
 ↓ 
 請求書シートの所定の場所に、ピボットテーブルを表示させる   
 でいいんじゃないの? 
 取引先や日付範囲でフィルタすれば全自動になると思う 
  >>270   そのまま別のデータをコピペすることもあるので 
 ピボットテーブル直接表示させたらズレませんか? 
  >>271   どうズレるかはよく分からんけど・・・   
 ズレるのが怖いなら、 
 単純に参照すれば良い。黄色の部分は本当にシンプルな式だけで良いと思う  
  >>267   ピボットテーブルのフィルターに「取引先」を設定して 
 コピペするときにリンク貼り付けすれば 
 後はフィルターを切り替えるだけじゃないだろうか 
  >>266   ありがとうございました 
 これでUboundを業務で使えます 
 これからもご指導よろしくお願いします 
  >>272   >>273   いずれもコピーは必要なんですね 
 ここに貼り付ける、ときたら 
 勝手に集計したのを貼ってくれといいのですけど   
 ちなみに零細で月に10枚程度しか請求書ださないとこは 
 ExcelのなんちゃってDBで十分ですかね?   
 フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った 
 これとこれをグループ化とかも簡単にできないし 
  >>275   >ちなみに零細で月に10枚程度しか請求書ださないとこは 
 >ExcelのなんちゃってDBで十分ですかね? 
 じゃなくて、成長率 
 毎年の成長率が高い企業は、本当に気をつけたほうがいい   
 >フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った 
 Excelがおかしな事をしているだけなんだよ 
 それがたまたま日本の零細~中小に合致しているだけ 
  >>276   ファイルメーカーつかってたが 
 レコードを日付でまとめて一覧ししてレポートだす機能もないんだよ… 
  外部からインポートもコピペではできないし 
 今どきはフリークラウドの管理ソフト(販売系、経理系、労務系)のサービスが山ほどあるでしょ 
 >>246   一例をそのまま貼ると、こんな感じです。   
 Dim VLOOKUP商品名 As String 
 VLOOKUP商品名 = "=VLOOKUP(RC" & eCols_明細.得意先コード & "," & WsName得意先テーブル & "!R" & eRows_通常.開始行 & "C" & eCols_得意先テーブル.得意先コード & ":R" & EndRow得意先テーブル & "C" & eCount_得意先テーブル & "," & eCols_得意先テーブル.得意先名 & "," & 完全一致 & ")" 
 めちゃくちゃ長くて可読性が悪いなと…… 
  変数に代入している際の話なら 
 >>282   それ自力で展開できないようじゃやばいよ 
  >>283   一応テーブルを参照する部分(VLOOKUP関数の参照範囲の箇所)を変数に代入することで少しは可読性があがったのですが、そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ、と思いまして  
>>284   「展開」とは? 
  >>267   「GROUP BY 複数条件」じゃないの?   
 GROUP BY 取引先, 日付 
  >>285   「そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ」ってのがよくわからん 
 どんな機能を使おうが、セルに代入したいなら必ず一度はコードに記載しなきゃいけないんだから「eCols_明細.得意先コード」とかの変数名を短くするくらいしかないでしょ 
  >>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)"   
 みたいな感じ? 値や範囲をセルによって可変にしたいなら変数に格納する値を変えればいいわけだし。。。 
 こういうことじゃないのかな? 
  そもそも数式をVBAで入力することってあんまりないよな 
 >>289   そうですねぇ、あんまりないですね。 
 経験としては、計算式があるのにどうしても直打ちされて消されてしまうシートに 
 ボタン一発で計算式を復旧させる機能を付けた時くらいですかねw 
  やっぱりVlookやsumifみたいな 
 >>291   Excelに備わっている関数は強力だと思うし使い勝手が良かったりするものもありますね。 
 私の場合はcountifやmatch、max、minあたりはVBA上でもWorksheetfunctionからよく使います。 
  >>291   かなり最適化されてるしマルチスレッドで動作するから同じ処理ならVBAより相当速い 
  >>275   零細だったらそれこそappsheetでもいいんじゃないですか? 
  関数を直接入力するとその後にシートに何かしら入力するたびに再計算されるから面倒だわ 
 >>296   ピボットあたりにしてみては? 
 coutif遅いよ 
  >>297   意味が分かりにくくてすまん 
 だから関数を直接セルに入力するようなことはせずに、vbaでworksheetFunctionとかDictionaryとか使って結果だけを出力するなって意味 
 vbaで関数を入力するのは引き継ぎとか他人に渡すのを想定したときくらいかな 
  2行目もよくわからんし 
 Application.Calculation = xlCalculationManual はとりあえず書いとくでしょ 
 >>300   昔書いてたけど、最近はほとんど書いてないな 
 PCスペックが大幅に向上し、負荷のないコードが自然に掛けるようになった 
  演算処理能力、メモリ容量、基盤の伝送量と速度が大幅に向上し 
 >>304   関数が入っているセルを参照するようなコードの場合 
 例えばCells(4, 3)にCells(3, 3)の値を10倍するような関数が入っているとして 
     Cells(3, 3).Value = 40 
     Debug.Print Cells(4, 3).Value 
 とやった場合、自動になっていればCells(4, 3)は400になった値が参照できて 
 手動ならもともと入っている値が参照できるという状態でしょ 
 スペックが向上、負荷のないコードだから書かないというのは危険な考えでは 
  >>308   再計算に左右されるコードを書く事がそもそもおかしいんですわ 
  配列がらみのFunctionを作ったときにメモリを空けようと「一時的な配列」を初期化しているのだけれどもしかしてあんまり意味ない? 
 >>310   function抜けたらメモリ勝手に空くから特に意味はない 
 それに今は潤沢にメモリあるから、メモリの空き容量なんて気にしなくていいよ 
  >>309   なるほど 
 こういう回答するやつとは通じ合えないのがわかったわw 
 しかも
>>311 の回答も適当だしな 
  >>312   vbaって配列の要素に変数を入れ込んでから配列を初期化すると、 
 要素変数への参照は切れるけれどメモリ領域は解放されないのでは? 
 それともvbaって配列要素への参照切れで割りあてたメモリを開放するの? 
  とりあえず「Erase」を書くのはあんまり意味無いっぽいんでやめます 
 >>310   > 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう 
 そりゃ参照を返してるだけで実体は一個しかないからRemoveAllしたら消えるよ 
 その後 TempDic を使わない事を明示したいなら 
 Set TempDic = Nothing 
 でもしとけばいいけどまあ関数抜けたら TempDic はなくなっちゃうんだから気にしなくていいと思うよ 
  まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは 
 意識高い系のVBA使いとか生きるの辛そうだな 
 vbaを使ってて0.01秒早くしてどうすんだ?って思うときはある 
 >>318   > まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは 
 > 使い終わったらさっさと解放することに越したことはないよ。 
 呼び出し元に返す話に何を言ってるんだ? 
  ならやっぱり配列要素がプリミティブでなければ 
 というか、vbaには参照切れで自動的にメモリ開放する機能がないってことなのか 
 >>322   例えば配列にループしてインスタンスを設定するとして、そのループの中でひとつの変数にNewしてインスタンスを作成して、 
 そのインスタンスを配列に設定した場合、前回のループで設定したインスタンスは配列の内容が削除されれば、他に参照しているところがない限りメモリから解放されるよ。 
  >>323   ガベージコレクションね 
 無いよ   
 逆に参照が合った時に初めてnewされるよ 
  >>322   配列の話じゃねーから絡んできて頓珍漢なこというのはやめてくれ   
 > 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう 
  >>326   それは済まなかった 
 でもそんなにイライラするなよ 
 ハゲが止まらなくばるぞ 
  >>330   いやわたしはハゲちゃおらんよ。 
 君みたいなハーゲマンと一緒にしないでくれ。 
  クエリA 
 神様皆様おはようございます 
 OneDriveで自動保存設定してるブックに手動保存するときだけbeforesaveイベントする方法はある? 
 >>336   CSV 
 schema.iniも使ってる。 
  >>339   SELECT句の中にアスタリスク使ってない? 
 UNION句で挙動がおかしくなるのはCSVファイルじゃなくてEXCELのシートにSQL投げたときに起こるのも見たことあるけど 
 まぁそもそもDBに投げてる訳じゃないからある程度は仕方ないってところもあるよ。   
 CSVファイルはUTF-8かSJISかってのもあるけど 
 UNION句の上下入れ替えたら直ったというのであれば今回は関係なさそうだしね。 
  >>340   アスタリスクは使ってるけど、 
 A.* ってテーブルは指定してる。 
 入れ替えで直るから、 
 今困っているわけじゃないけど、 
 これから先使うの不安だわ。 
  >>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を実行する 
  サーバーにあるフォルダからPDFを検索したいのに上手くいかない 
 if文の文字列比較条件でワイルドカードが使えたらいいよね 
 >>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 
 をコメントアウトしといた方がいい 
 予想外のエラーを握り潰されて(当人にとっては)意味不明な挙動になることあるから 
  請求書の原紙となるsheetをコピーして、そこに配列に格納した請求情報を貼り付けるという作業を約100回繰り返したいのですが、 
 シートがクソ重かったりPCがクソ貧弱だったりするなら、 
 >>357   後にまとめて印刷して突き合わせを行うため、請求書のシートの順番を配列の要素の順番と同じようにしなければなりません 
 よって②の場合は、配列の値を貼り付けた後に(配列の添字が 1 から始まるため) “Copy After := Worksheets( i )” を記述することになります 
 つまりシートをコピーする度にシート数をループ変数から取得する処理の繰り返しになるのですが(①だと “Copy After := Worksheets( 1 )” でもよい)、それでも②の方が安定しているのでしょうか 
  請求書ってそんな適当に作ったマクロで請求していいものなのか 
 >>360   私がマクロを作る前は手書きで請求書を書いてエクセルに抽出した請求データと目視で突合していたんですよ(現在は自作した請求書を自動発行するマクロをスピードアップを目的に改修しているところです) 
 そういう会社もあるんです 
  iはWorksheets.Countあたりを使えばいいんじゃないの? 
 ただそういうモノづくりをしてる自分からしたら 
 >>362   Worksheets.Count はなおさら遅いのではないでしょうか? シートのカウントを約100回繰り返すので 
 些末なこだわりと言われればそのとおりなんですが、どうせ改修するなら細かいところまでこだわった方がスッキリすると思いまして  
>>363   指定した得意先の請求書のみを発行するコードも別のモジュールに書いてあります 
 メインは請求データの照合及び修正を行った後に約100件分をまとめて発行するフローでないと時間がかかってやってられないんです 
  それならまずシートを100作るだけのコード書いて試せば済むことじゃないの? 
 >>365   確かに自分で三通りの方法をテストしてみれば済む話なんですが、もしかして私が挙げた処理はよくあるパターンであって一般解が確立されているのかなと思い、質問させていただきました 
  たかが100回で差が出るわけ無いじゃんというレス付いてるだろ 
 >>348   If LCase(oFile.Name) Like LCase(TextBox1.Value)&"*.pdf" Then 
 この部分、頭にもアスタリスクをつけてみたら?   
 If LCase(oFile.Name) Like “*”&LCase(TextBox1.Value)&"*.pdf" Then 
  100回やって差なんか0.1秒もないだろ 
 リファクタリングの基準ってどれぐらい? 
 アンケート禁止にしないか? 
 自社の開発時のルールで決めてるんじゃないの? 
 みんなプロなのか 
 >>372   しないよ    
>>373-375   thx 
 その時の気分とか空いてる時間があるとか、 
 業務に支障がない限りはそんなもんよね 
  >>375   本職も多いよここ 
 即答できる人もいる理由はそこ 
  ソートがうまくいきません。 
 >>381   callで呼んでるのが変。むしろそんな書き方が出来るのか!と新しい発見レベル 
 sortの書き方が古い。2003以前とかの書き方だったような気がする   
 Sub aaa() 
 Range(Cells(2, 1), Cells(6, 2)).Sort Key1:=Cells(1, 1) 
 End Sub  
https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.sort    戻り値が必要ない呼び出しするならcallでもいいでしょ 
 >>382   このやり方で無事できました。ありがとうございました。    
>>383   このやり方も試しましたが、できませんでした。 
 やっぱりcallは使わない方がいいんでしょうか。 
 拾ったコードをよくわからずに使っていました。 
  え?VBA本職の人がこのスレにいたような?? 
 そんな訳ないじゃん 
 ネット検索で出てきたコードを参考にして、あるシートから別のシートへ PageSetup オブジェクトのプロパティを引き継ぐ汎用コードを作ったのですが、 Application.printcommunication を触ると何故か処理がコケてしまいます 
 VBAが本職ではないけど 
 VBA で金貰ってる(=給料の一部)と言うだけならかなり多くの会社員が該当しそう 
 >>392   解決方法じゃなくてすまんけど。 
 trueを設定してこけるということはその前にfalseを設定してるのだと思うけど、 
 falseとtrueの間の処理でなんの設定を変更するとこけるのかを地道に探し出すしかないような気がする。 
 プリンタ関係だとページ設定あたりかと思うけど思わぬところが影響してることもあるし、プリンタ環境は千差万別だしね。 
  >>392   マクロの記録で実際に設定したい値をまずは取得してみて 
 そのコードをそのまま使ってみてもエラーになるわけ? 
  >>392 ,398 
 ちょっと気になって試したけど、それ、ほんとは 
 .Zoom = False の行でエラーになってるな   
 ステップ実行させてみればそこでちゃんとエラーになるんだが 
 普通に実行させるとそこでそのエラーが発生しないで、 
 PrintCommunicationで予期せぬエラーとなってるんじゃないか 
 (うちの環境では順番入れ替えて同じだった)   
 VBAのバグっぽいしマイクロソフトに問い合わせるのがよさげだが 
 一度ステップ実行で1行ずつ試してみれば? 
  そのブログのコードは拡大縮小の部分についてみたいだけど 
 >>400   なるほど。 
 そうなると.PrintCommunicationが認識出来ないプロパティがいくつかあるのかもしれないね。 
 ステップだとその時々で確認しにいくけど走らせるとPrintCommunication=trueで一括設定しようとするからそこでエラーって感じかな? 
 1004エラーってコードに不備があるときに出る印象があったから個人的に納得。   
 なんか参考になった。試してくれてありがと。 
 いや質問者じゃないんだけどw 
  >>401   ああ、それもそうだね。 
 『ズームを有効にするか無効にするか』 
 じゃなくて 
 『拡大縮小率をどのくらいにするか』 
 を具体的に指定するプロパティなら確かにその通りだわw 
  A1の数字が10以上で、B1の文字がたた、なな、はは、まま、やや、ららが含まれている場合に、D1にプレゼントと書きたいんですけど、どういうvbaか教えて頂きたいです。 
 馬鹿って仕様すらまともに書けないから馬鹿なんだよな 
 その候補を別のシートに並べればワークシート関数で一発では 
 特定のフォルダにある一番新しいファイルを 
 ファイルをそのまま変換してdbに読み込ませればいいだろ 
 バカっていう方も悪いけど、それに対して韓国人呼ばわりはさすがにひどすぎると思う 
 >>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: 一番新しいファイルが複数あるとどれが開かれるかはわからない 
  お前らすぐバカバカって言うけど、人を見下せるほど大した人間なのか? 
 スキルと人間性は別なんだなあ 
 >>413   人間性が最低ってことやね 
 スキルがあっても敬遠したいな 
  人間性よかったらこんなとこいないで普通の生活で満ち足りるやろしな 
 他人に馬鹿と指摘するのは事実だから仕方ない 
 本当の事だから言っているだけ 
 いまさらなんだが・・・ 
 何をやるかによるだろう 
 回答が付くまでの間は別の作業をしてるんだよ 
 >>424   それなら処理が遅くても別の作業してればいい 
  俺はdictionaryが好きでよく使うなあ 
 >>428   それって文字列をオブジェクトに変換するとかできるの? 
  ソートならキーの順番は大事だろ 
 >>429   ? 
 なんで文字列をオブジェクトに変換する必要があるの? 
 普通に考えてエンティティクラス作って 
 その中に内部変数として持っておいて 
 プロパティとしてやり取りするのが定石でしょ? 
  >>431   で、どうやってキーの順序保証してるの? 
  8万行×100列(うち、実際に使用するのは15列程度)のデータを 
 >>435   fornextで何やるかによるけど、 
 ピボットが一番楽だと思う 
  >>436   やはりピボットかぁ 
 俺、VBAでピボットとテーブルを制御するの苦手なんだよねえ 
 ちょっと練習するわ    
>>437   私はPythonを使えぬのだ! 
 勉強してみたいけどね 
  >>439   vbaとピボットの組み合わせが結構めんどくさいのは同意だけど、 
 そもそもピボットならvbaいらなくないか? 
  >>440   仰るとおり単なる集計だけならVBAいらないのだけど、  
>>435 に書いた通り既定の集計表に沿って作成する必要があるから 
 作成したピボットからデータを拾って集計表に転記しなきゃいけないんだわ   
 集計表に載らないエラーデータのピックアップもしなきゃいけないし 
  >>441   なるほどなー 
 実データ見てないからなんとも言えないけど、 
 俺なら列を追加して、 
 関数かvbaで非集計対象にtrueを入れるなどしてからピボット、 
 という感じで運用すると思う 
  >>442   なるほど、サンキュ 
 しかし、エラー判断のためだけに8万行を走査させたくないんだよね、、、   
 やるならピボット作った後でやったほうが走査数減りそう   
 やはりVBAでのピボット操作特訓だな 
  そもそも行と列しか情報もらってなくて 
 回答しにくいとかどうでも良くね 
 数時間コースのマクロ走ってるの知らなくてブラウザでコピペしたらデータぶっ壊れて怒られた思い出 
 確かに質問内容としては抽象的過ぎたね。 
 いまどき8万行15列程度でスゲー時間かかるとは思えんが 
 >>435   WorksheetfunctionからCountifで存在確認。 
 Matchで行番号取得。 
 Rangeを変更しながらループしてすべての行番号を蓄積。 
 速いかどうかはわからんけど8万行走査するよりは工程は短い気がする。 
  >>435   まあ集計がSQLで書ける範囲なら 
 ADO接続でSQL投げて結果のレコードセットを 
 シートに貼り付けて終わりにするわな 
  8万行100列をセルだけで処理しようとしたら凄く時間かかるのわかるけど、配列にいれて処理したらそんなにかかるか? 
 いまだにXPとか使っててマクロが遅いとか言われてもね 
 VBAが就活で必要になりそうなんだが、みんなはどうやって勉強してるか教えて欲しい 
 >>454   上級者と言われている人達はみなMSヘルプで勉強しているみたい。 
 あとMSコミュニティとかで情報交換みたいな感じで。 
  自分で一から全部書いたりしない 
 今ならchatGPTにでも聞いてみたら出てきそうw 
  マジかよ・・・ 
  >>454   ググればvba100本ノックって出てくるからそれやればいいんじゃない? 
  >>459   そんなサイトないよ。 
 「ハゲれば横山ノック」というサイトはあるけど。 
  でもな、ネットの無い時代なんてそれこそイチから手探り状態で書いてきたんでしょ?? 
 >>459   100本ノックあったわ 
 これやってみるか 
 ありがとう   
 あとVBAってみんなExcel付属のアレで書いてるの? 
 vscodeの拡張見つけたからそっち使おうと思うけど問題ない? 
  >>461   VBAに限らず苦労しないとダメってのは時代遅れなんだとさ 
  >>454     郵便局の郵便番号データを取り込んでいろいろやってたことはある。 
 郵便番号から住所取得とかキーワードを含む住所の郵便番号をユーザーフォームでポップアップさせるとか表示項目を可変させるとか。 
  >>462   基本VBEで書いてる。最終的にはExcelのモジュールやクラスに入ってなきゃいけないもんだし。 
 ただ複雑になってよく判らなくなったり他人のコードを解析したいときなんかはVScodeに張り付けて読んだりもする。 
  >>462   EXCELVBAのVSCodeのなんてあるのか 
 まぁでもEXCELってRangeとかセル位置、 
 名前定義とかシート見ながらちょくちょく 
 走らせて確認する場合が多いから 
 EXCELに付いているVBエディタで 
 ブレイクポイント掛けてトレースしていく方が 
 EXCEL単体の作業せあれば楽だと思うけどね   
 .Net絡みだってUI絡みなら 
 VS Codeより使えるならVSCoreの方が楽でしょ? 
  >>463   苦労しないとダメとは思わないけど、やっぱ自分で書いて実行しながら作ってった方が覚えるからあんまりネットからのコピペはしないな 
  まずはVBの構文からだね 
 ネットがない時代は苦労したって言うけどさ、その「苦労」って結局は正解を手に入れるまでの「時間が長かった」ってだけのことなんだよね 
 いや、購入した本が間違ってる場合もあったんだよ 
 >>470   情報の質にバラつきがあるのはネットも同じ 
 役に立たないサイトのがよっぽど多い 
  でもさ、初期にExcelの指南本書いていた人達はどこで知識を身につけたのだろうか?? 
 いちばん最初は、分厚い説明書付いてきた 足りなければmicrosoftのFaxへ電話して 
 >>472   昔はマイクロソフトが講習会とか開いてたんよ 
 1回何万円も払って授業を受けに行ったわ 
  >>469   趣味ならともかく曲りなりにもビジネスなら時間は重要だろ 
 あと、ちょっとレアな手法(例はよくないかもだけど例えばクラスにデフォルトプロパティを追加する方法とか)は載ってる本を探しきれない 
  >>476   あんた、最近みんなから相手されないからって拗ねたレスするなよな。 
 職場でもそういった態度なんか? 
  >>475   え?クラスモジュールでデフォルトプロパティ設定できるの? 
  >>477   自分がどんな馬鹿なことを聞いたのか理解できないのか? 
 真正の馬鹿だな 
  >>471   だからネットなら比較簡単って言ってるじゃん 
 最初に見つけた解決法でハイ終わり!って小学生かいな    
>>478   気にしたこと無かったけど、凄い方法で実現できるようだ  
https://thom.hateblo.jp/entry/2015/02/16/003000   エクスポート、インポートでやっと実現するとか面白いコーディングだ 
  >>478   ちょっとトリッキーだしMSが保証してるかどうかがわからんから例としては良くないって書いたけど 
 VBA クラス デフォルトプロパティ 
 でググれば出てくるよ  
https://thom.hateblo.jp/entry/2015/02/16/003000   こんなのどうやって見つけたんだろう... 
  >>480   この人のブログはかなり読んでたつもりだったけど 
 この記事は完全に見落としてた   
 ってか、この手法は面白いけどマニアック過ぎるね 
 後で試してみよう 
  Range(Cells(7, 1), Cells(7, 3)) = "一括入力" 
 >>479   だからこっちがあんたに質問してるの 
 もう一度聞く 
 職場でもそんな態度で過ごしてるのか? 
  >>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( )使ったりケースバイケースかと 
  >>483   そもそも一括入力する場面ってのがほぼ無いと思うが・・・ 
 vbaでテンプレートを作らざるを得ないような状況なら、一番上かな。アルファベットでセル指定する意味は無い    
>>484   お前がアホだからアホみたいな意見が付いてるんじゃないか  
>>472 はちょっと酷すぎるぞ 
  >>483   Range("A7").Resize(1,3)="一括入力" 
 Cells(7,1).Resize(1,3)="一括入力"   
 これが一番応用効いて楽だよ 
  いつものかまってちゃんを相手するなよ。 
 >>487   都合の悪い質問に答えられないか。。 
 あんたさ、職場で上司や同僚から「取っ付きにくい人」とか「話かけにくい」って言われてないか?   
 そういう性格早く正さないとハブられるよ? 
  単なる雑談に噛み付いて謎のマウント取りはじめるとかキチガイだろ 
 別ファイルの複数シート(日付ごと)の特定の値を日付ごとにとってきたい場合ってどうしたらいいんでしょうか 
 自分で書いてる通りのコードを書けばいいんじゃね 
 会社から他の社員にVBA教えてやってくれ、って言われたら素直に応じる? 
 業務命令で仕事のタスクとして依頼されるなら応じるだろ 
 ユーザーフォームを表示してテーブルにあるデータのうち任意のレコードを入力させるマクロを作っているのだけれど、テキストボックスにするべきかコンボボックスかそれともリストボックスをクリックさせるべきか、迷っている 
 要件満たせるならどれも一緒だけどその3つの何で迷ってるか書いてみたら? 
 >>502   テーブルにあるレコードは100件くらいで、その中からなるだけ手っ取り早く入力できるようにしたいんですよね 
 テキストボックスとリストボックスを併用してどちらか好きな方から値を取れるようにした方がいいのかなと考えています 
  上司に言われただけじゃ無理でしょ 
 お助けを願います 
 >>503   じゃあそうすればいいのでは 
 作ってみて違和感あれば別の方法考えたらいいんじゃ    
>>505   CONCAT使えばいいんじゃない 
  >>497   覚えるべきは、あなたです。末端は、組織が作ったシステムを使うだけでいい。 
 というべき。 
  VBAのスキルが重宝される程度の職場なら、職務経歴書のいいネタと思って教えてやれよ 
 >>508   程度のレベルで身につくんだけど、実際日本人の9割以上はVBAなんて、出来ない。 
 よくエクセルマクロを使える割合見たいのがあるけど、ああいうサイトに行く人という母数でとっても3割程度。 
 実際は、まともな企業でも数百人に一人くらいしかいない。 
 だからVBAだけで神扱いされるんだけど・・・   
 本来は、幹部こそ覚える技術なんだよね。 
 システム化って、まさに業務運用そのものを決めるようなものだから。 
  AからFの列範囲に何行あるかわからないデータがあるとき 
 >>507   本来うちの会社もそんな感じ考え方だったのだけど 
 部長(配列もfor eachも使えないレベルの自称VBA名人)が 
 旗振り初めたお陰でしょーもないVBA講座が始まったんだよ   
 俺自身は社内でVBA使えることを殆ど話したことなかったが、 
 お前もなんかちょっとは使えるみたいだから 
 講座受けて講師手伝えとか言われ始めたわ   
 下らなすぎてマジで憂鬱 
  >>511   全員が使える必要はないんだよなぁ 
 VBAで無駄な作業を消していくから、社員はむしろ削られる方向になる。 
 だから、末端がやると摩擦が起きるから、幹部がやるのが正しいんだけどねぇ…。   
 幹部がプログラミングできると、それを理解しているんだけどね・・・。 
 そもそもシステム化とは、業務運用・業務ルール・業務管理あらゆるものを交換の利く末端に強制的に行わせるものなんだから、それって幹部の仕事だよね?ってはなしなのにね。 
  >>497   勤務時間内ならそれも仕事だから教えるが 
 編集の方法だけ教えて細かな内容は自分で調べるように伝える 
 あとは「教えました」できないのは本人の勉強不足なので質問されれば答えるだけ 
  仮に講義したとしても 
 結局、講義したいなら有料の〇〇コースって外部の講義を使用するのが一番なんだよな 
 セミナー行っても全員が自信を持って理解できたってことにはならないだろうしな。。 
 聞かれたら教えるけど、聞かれなかったことは教えようがない 
 本来、質問するならネット等に載っていない事例を聞くべきだよね。 
 あと、教わればどんなことでもできるようになると勘違いしている初心者も多い 
 >>510   マクロの記録で試しに線を引いてみたらコードを生成してくれるから 
 それをみてあたりとかつけてみたらいいんじゃないの? 
 特定セルの座標はTop,Left 
 高さと幅はHeightとWidthで取得できるから計算して引いてみ 
  >>506   ありがとうございます 
 concatなかったんでconcatenateを使いましたが同様にエラーが出てしまいました 
 基本から調べてみます 
 スレ汚しすみません 
  >>522   これでいいんじゃないの? 
 Range("A1") = "=SUBTOTAL(103,A4:A300)&""/""&COUNTA(A4:A300)" 
 Range("A1") = "=CONCATENATE(SUBTOTAL(103,A4:A300),""/"",COUNTA(A4:A300))" 
  >>522   セルに入れたい数式自体がエラーになる(間違ってる)からVBAでもエラーになってる。 
 セルに入れたい数式は下記かと。 
 =SUBTOTAL(103,A4:A300)&"/"&COUNTA(A4:A300)   
 VBAで書き込む場合。.Formulaは無くてもいけるけど明確に数式として入れたい場合は書いといた方がいい。 
 Range("A1").Formula = "=SUBTOTAL(103,A4:A300)" & "&""/""&" & "COUNTA(A4:A300)" 
  >>524   > "=SUBTOTAL(103,A4:A300)" & "&""/""&" & "COUNTA(A4:A300)" 
 "=SUBTOTAL(103, A4:A300) & ""/"" & COUNTA(A4:A300)" 
 じゃだめなの? 
  休みでもVBA書くのか、凄いな 
 え?みんな休日はExcelやらないの? 
 家だとVBAで作りたいネタが思い浮かばない、、 
 >>515   VBAを教えるのに必要なのは、講義の時間ではなく、「自分でも業務改善プログラムを作れた!」っていう成功体験だと思う。 
 処理速度云々は、相当後のほうでいいと思う。   
 ここで、資質があるやつと、そうでないやつがわかる。 
 資質のあるやつは、自分の作ったプログラムをさらに改善しようと、いじる。 
 このいじる作業をしているやつだけを見つけて、さらに教える。 
 改良作業をやってるやつは、理屈を理解し始めているから、いじれる。 
 そして、そのうちマニュアルやサイトでの調べ方と適用方法を理解して、自然と、命令数が増えてくる。   
 改良を試みてないやつは、たぶんプログラム自体、どっかから丸々コピペしてきて、それで運よく目的を達成できてるだけだから、動作原理わかってない。 
 ゆえに、次の問題を与えても、成長していないから組めない。 
  >>532   このスレをずーっと過去に遡って、面白そうな奴を片っ端から解いていくだけでいいんじゃないか? 
 俺は毎日やってるから出来ないけど   
 あと、vbaよりもスプレッドシートのGASのほうが色々出来て面白いよ 
  いや奈良公園にせんべい持ってくと鹿に襲われるけどな 
 マジレスすると、2ちゃんねる時代からスレタイから脱線した内容になるのは普通だから。 
 軌道修正レスも普通だから。 
 Excell2019 win10という環境で標準のVBEを使用しています。 
 無い。 
 最初から個別の値をウォッチ式に入れておくとか 
 >>545 >>546 
 ありがとうございました。 
 個別でウォッチ追加します。 
  複数のExcelファイルで作業をしていると、ふと見るとVBEの左側のツリーに立ち上げたファイル名がずらずら並んでいることがあります 
 >>549   Excelがファイル閉じるのを失敗している 
 その場合、一度失敗するとそれ以降全部失敗する   
 再インストールか、メモリの増設した方がいいと思う 
 あとLAN上にあるExcelファイルを開くとそれになりやすい 
  >>549   マクロで開いてるならマクロがおかしいから 
 private変数でブックを保持する様にしているならそれが解放されてないと起きるかと 
  >>550-551   ありがとうございます 
 他ファイル参照するために開いて閉じるようなマクロは結構多用してます 
 基本的には単純に開いてはデータ引っ張って保存せず閉じるというような内容ですが…   
 参照するファイルはLAN上ではありませんが、OneDriveの共有フォルダには置いてあります(ローカル保存) 
 一度この辺のマクロを見直してみたいと思います 
 原因がわからなければ再インストールしてみます 
  >>549-552   ウチもマクロで他の個別ブックを開いて 
 その中のマクロを実行して上書き保存・当該ブックを閉じる 
 をやってたけど、VBEの左側ツリーに閉じたはずのブックがズラズラ・・・   
 開くブックが70個ちょっと、中のクエリーをテーブルとして変数に設定するところで 
 いつもコケるようになった。 
 ブックの保存先はいずれもローカル。   
 操作するブックと操作される個別ブックの変数、プロシージャ名は 
 重複しないようにしていたがダメ。 
 次のブックを開くインターバルを1秒~とか、 
 クエリーはテーブルオブジェクト変数に入れているので、 
 毎回Nothingを入れてみたがダメ。   
 結局、地域毎に開くブックを50個くらいに収まるように 
 操作するブックを分けた。   
 ブックを割り当てる変数と、 
 それを保存・閉じる記述を見直してみようと思う。 
  >>552   onedriveか、あれもLANと同様になんか変な挙動になっている 
 僕はあまりの挙動不安定さにスプレッドシートに逃げたよ   
 閉じる動作・共有に関して、もっと突き詰めたほうがいいかもしれない   
 カンだけど僕がやるなら以下のような形です。解決するかどうかは不定。   
 ・開いたExcelを、一回activebookにしてから閉じる 
 ・適度に、OSに処理を返す。forを使っている+時間が掛かっている場合、適当にDoEvents()を挟んでみると改善する可能性があります 
 ・onedriveの挙動が予測できないので、一旦ダウンロードフォルダなどにコピーしてから使ってみる。 
  どうも共有フォルダはタイムラグがあるのか、意図しない非同期になってしまい良くないことが起こっている気がする。   
 非常に問題を捉えづらい、難しい問題と思います。頑張ってください 
  >>553   WorkbookやWorksheet含めてObjectは順序だててNothingするようにしたらそんなこと起きないとおもうよ 
 set oWB = xxx 
 set oWS = oWB.xxx 
 なら 
 set oWS = nothing 
 set oWB = nothing 
 という順ね 
 面倒でもNothingで解放するクセつけたほうがいいと思うぞ 
  マクロの管理・閲覧ってみなさんはどうしてるんでしょうか? 
 俺は普通にブックをSVNでバージョン管理してる 
 差分を見たい時は見たいバージョンを保存して最新版と保存したバージョンから各々エクスポートして差分を取ってる 
 VsCode の拡張もあるみたいよ ⇒ 
>>462   >>556   ブックのマクロを別ファイルに保存するということはコードの2元管理になるからしない 
 普通にブック開いてVBEでみるだけでそれで困ったことはない 
 別のブックのコードを参照したい場合は一時的にそのコードをコピペしてエディタで見ることはあるけど終わったら削除してる 
 何度も手直しするような事もないからバージョン管理もしてない 
  >>556   特にしてない   
 昔はよく使う「最終行の取得」や、「set〜」なんかをまとめたブックを作ってそれをコピペしていたけど、 
 コピペしないほうが早い事に気づいてからはそういうのもなくなった 
 高速化もよほどじゃない限りしなくなったな。 
  vbaでファイルを開くダイアログを出させて、ユーザーに任意のシートを指定させ、 
 VBA側でそのシートオブジェクトを取得して、解析をするというものを作ろうとしています。 
 よろしくお願いします。    
https://oshiete.goo.ne.jp/qa/3042408.html   こちらに「シートを選択させてアクティブにする」というコードがあります。  
https://www.kurumico.com/excel-vba-file/315/   こちらには「ファイルをダイアログから選択指定して開く」というコードがあります。   
 単純に組み合わせたら願望はかないました。   
 そこで質問したいのは 
 MyDialog.Controls.Add(ID:=957).Execute 
 これが一体何なのかということです。 
 エクセル2019の左下にあるシート一覧を左右に移動する 
 ← → 
 このマークのところで右クリックをすると同じようなシート選択ダイアログが出てきます。 
 そして選ぶと、アクティブになります。   
 957を一覧から探してもこういう説明を見つけられないでいます 
 そういう理由からCommandsBarsもControls.addもイマイチ理解を深める事が出来ずにいます。 
 どこかいい説明サイトがありますでしょうか? 
 >>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     ただこのコマンドリストを一時的に利用するというテクニックは、これ以外に使い道は無いと思うから 
 そんなに深く考えなくてもいいと思うよ 
  俺もID=957が何なのか探したけど見つからんな 
 >>561 >>562 
 調べていただきましてありがとうございました。 
 これで質問を解決とさせていただきます。 
 深く考えない事にしますが、これを初めて見つけた人はどうやって見つけたのでしょう… 
  >>563   昔はそういう一覧が合ったんだと思う 
 で、マイクロソフトが更新忘れて、忘却していると思う 
 (別に作る義務はないんだけど) 
 マイクロソフトに言えば、作ってくれるかもね 
  >>563   debug.Print CommandBars.Add(Temporary:=True).Controls.Add(ID:=957).Caption 
 「シート一覧(&S)」 
 これで存在を確認できるね   
 for-nextで総当たりして見つけたんだろうね 
 リボン以前の時代に 
  マイクロソフトのサポートに聞けば有償で教えてくれるだろ 
 素人質問で申し訳ありません。 
 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
 >>568   ID違うかもですが早急なご回答感謝です。 
 下から3行目のDateをNowに変更いたします。 
 ID:U+Y4eA/v0様とご家族の今年一年の 
 健康をお祈り申し上げます。 
  凄く初歩的な事かもしれませんが、自力でわからなかったので教えてください。 
 >>570   【2】はOn Error Go To を使ってエラーが出たら処理を辞める方法がある 
 もしくはエラーが出る特定のところのみOn Error Resume Nextを使ってエラーを無視して、その時にErrオブジェクトが値を持つかを見て値を持ってたら処理をやめるとか 
 【1】は無理 
 というかエラーが出ることが分かるならエラーが出ないように直すべき 
 個人で使うのならいいけど、他人に使わせるのにエラーが出たままは相当マズい 
  >>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 
  >>571 >>572 
 無理でしたか… 
 「エラーが出たら一旦エクセルを再起動してもらって、私がコードを直すまではそのボタン触らないで」 
 っていう事にしようかと思います。   
 >というかエラーが出ることが分かるならエラーが出ないように直すべき 
 ハっとしました。 
 On Error Go To処理はエラーが出るの前提みたいで使うのいやだなと思ってましたが、 
 エラーを前提にしてたのはよっぽど自分の方でした。   
 解決です。ありがとうございました。 
  新年早々馬鹿か 
 >エラーが出たら一旦エクセルを再起動してもらって 
 >>573   「エラーが出たら一旦エクセルを再起動してもらって、私がコードを直すまではそのボタン触らないで」 
 これはいいけどさ、そもそもエラーが出るって分かってるものを使わせるのはヤバいだろ 
 エラーを出さないようにしてから使わせるか運用制限を書いとくかするのは必須だろ 
 それでもエラーが出た場合はそう言うのであって、最初からエラーありきはどう考えてもおかしい 
  >>578   よくないだろ 
 どんなエラーかどういうデータでエラーになってるかをエクセルを終了して全部消して連絡くださいと書いてるわけだ 
 馬鹿過ぎて片腹痛い 
  >>579   そうだな 
 エラーが出た時点で連絡するべきだ 
 ただ「馬鹿過ぎて片腹痛い」これは言うべきか? 
 こういうことを言ったら萎縮してスレに書き込む人が減るだけ 
 メリットがなにもないどころかデメリットしかないことを言う意味はない 
  エラー地雷が必ずあるボタンとか怖すぎる 
 >>580   内容も吟味せずに脊髄反射で書き込んで馬鹿を擁護するお前のような奴が馬鹿を蔓延らせることに気付くべき 
  >>580   >>560  にも答えられない馬鹿に言われてもな 
  >>582   お前の書き込み内容、有益な情報が一つもないじゃん 
 「内容も吟味せずに脊髄反射で書き込んで馬鹿」ってお前の事? 
  なんだかすみません。 
 初心者が思い込みで作ると失敗する 
 当たり前だけどファイル操作はVBAの知識以外にOSの知識もある程度必要になるから聞かなきゃ判断できないような処理ならやらないが吉かと。 
 >>585   自分はWin10+Ofiice365だけど 
 開いているファイルと同じフォルダのファイルを開こうとすると開いているファイルがアクティブになって 
 別フォルダの同名ファイルであれば同じ名前のファイルは開けないってエラーになるから 
 古いバージョンでも一緒なんじゃないかと思うけど 
 回避したいならWorkBooksの内容をチェックして同じファイル名があればメッセージを出して処理を止めるなりすればいいんだと思うけどね   
 古いバージョンでもチェックしたいなら単純にフォルダA、フォルダBに同じファイルをいれて両方開けるか試してもらうだけでいいと思うぞ 
  多分だけど、手動で同一ファイルをダブルクリックで開くような操作では無く 
 ありがとうございました。 
 上の方でエラーが出たら自分でコードを修正するって書いているから解決方法は知っているんだろ? 
 >>590   全てって言っても場合によるよ 
 入力内容のチェックなら数値文字列エラー値ぐらいでほぼ網羅できるけど、 
 ファイルを開いたりアクティブになったりってなるとExcelやOSとの兼ね合いも出てくるからほんとキツイ 
 通常操作の9割をカバーできればいいと思う   
 あとは起きたエラーに都度対応していくしかない 
  >>591   ファイルロックとかは可愛いもんでウイルスに実行ファイルを書き換えられたとか、アクセス中に停電とか、HDD不安定とかもしもを考えだすと切りがない 
  VSCode では、同名のファイルでも、パスが異なると開ける。 
 VSCode では、同名のファイルでも、パスが異なると開ける。 
 最初にon error resume nextを書いとけばランタイムエラーを出さずに原因不明の謎の挙動だけで済む 
 >>593   でた、極論で語る奴w 
 お前は毎回そこまで考えてコード書いてるのかよ 
  >>594   むしろダメなのはメジャーなソフトではExcelぐらいだと思うぞ... 
  読み込みに失敗、書き込みに失敗程度の動作確認は初心者でなければやると思ってる 
 まあテストをどこまでやるかは状況次第だけどファイル関係をエラートラップしてリトライなりエラー表示をするのは普通だと思う 
 書捨てとか自分しか使わないならエラートラップを端折ってあえてVBAのエラーで止めるとかはある 
 個人的にないのは
>>597 みたいなエラーの握りつぶし 
 まともな開発だとエラー握り潰しは絶対ダメだけどVBAだからなあ 
 >>598   アホが食いつかんかなと思って恣意的に書たんたがこれほどとはw 
 こどおじには解らんだろうが絶対落ちてはいけないシステムならそのくらいの対策は普通にされてるぞ 
  >>602   VBA だから握りつぶしても良いと言うのはよくわからん 
 まあモダンな言語に比べてエラー処理がやりにくいと言うのはあるけど 
  >>603   VBA で書く絶対落ちてはいけないシステム! 
 本でも出せば?w 
  >>605   おいおい俺はVBAとは言ってないぞ 
 お前が勝手に吹いてるだけなんだが自覚できんのか 
  VBAでは絶対に落ちてはいけないシステムとかいう発想自体がシロウト臭丸出しでハズいな 
 正月からこんなとこでイキってる程度だから仕方ないか w 
 >>606-608   スレタイ100回読んで来年までROMっとけ 
  >>593 なんてハードウェアやその周りのソフトの対策であって開発するアプリケーションで考慮する話ではないと俺も思ってるけどな 
 まあ戻れないところまで追いつめられて必死なんだろうけどそろそろ落ち着いたらどうかね 
  やりたいことあって今日人生で初めてプログラミングに触れたんですけど、ぜんぜんわかりません 
 idが_rって書いてあるから_rって書いてんのになんでこれでエラー吐くんでしょうか 
 助けてください  
 >>611   Seleniumでスクレイピングしようとしてるのは分かるけど、 
 その部分だけコード見せられても分からない 
 全部見せて 
  これって前澤じゃんけんで金もらえるから自動化したいとかそういう事考えてるんじゃね? 
 モチベーションの起点はなんでもいいだろ 
 >>615   まさにそれだね 
 招待すると挑戦回数が増える 
 謎アプリをインストールすると100円ぐらいもらえる 
 という仕組みらしい   
 プログラムを覚える同期としてはとても良いと思うが、 
 登録とか色々必要だからめんどくさくて検証できないな 
  >>616   おれは教えないだけだから別にかまわんよ 
 そもそも今さらそんなこと聞いてる奴だから他でも聞いてるかもしれんし作れるとも思えないしな 
  それよりもグー、チョキ、パーがr、s、pになる理由を誰か説明してくれ 
 すみません、質問させてください 
 Listってなに? 
 >>625   PowerApps使えば一行もコード書かずにできるよ 
  >>625   それ本当にExcelそのものじゃん 
 新しいウィンドウを開くとか試してみて 
  >>627   listviewなどです 
 listviewはコード以外に画面編集可能ですか? 
  シートに書いてそれをlistviewに反映させればいいんじゃないかな 
 エクセル2019とそこに付随するVBAでは日付の起点が違うのですか? 
 >>631   それを嫌っている人達がいるんですよ 
 であればlistview等を使用してどうにかするしかないですが、そこまでするならVBAでやる必要が無いと思ってます 
  僕ちゃんの頭の中にはlistviewと勝手に名付けた理想のツールが存在しますということか 
 >>633   う~~ん、Excelが駄目な理由がよくわかんないな   
 キャッサバとか使ってみては??  
https://forest.watch.impress.co.jp/library/software/cassavaedit/     もしくはスプレッドシート+googleform使うとか    
>>632   「数値」は四捨五入されるから同じに見えるだけだよ。シリアル値を確認する時は、小数点も表示した方がいい 
 ちなみにmac版が1900年-1904年ぐらいがうるう年かlotusかなんかの関係でズレている。1905年以降からは全てのバージョン・マクロで同じシリアル値になる 
  >>634   通じるからいいじゃん 
 無駄な煽りはやめよう    
>>633   いい忘れてたけどlistviewじゃなくてlistboxかなんか 
  >>630   どんな編集したいのか不明だけど楽したいならAccessでもいいんじゃない 
 そもそも質問が漠然としすぎててListの形式もわからんし 
 単一項目や相関項目の入力チェックとか何がしたいかも不明なんだよね 
 質問する側も回答欲しいなら要件を書き出せないと適切な回答もらえないぞ 
  >>635   項目が50近くあって混乱するからといった理由ですね 
 他の人はできてますしそれくらい覚えられると思いますが、とにかく多量のデータを見ると混乱するそうです 
  >>632   ちょっとだけじゃ無くて、もっと調べると簡単に理由が出て来るじゃん 
 で、1900年の日付のデータを扱う必要が頻繁にあるのだとしたら、もっと詳しく調べて間違いが無いようにしとかないと 
  >>636   通じないよ 
 Excelシートが閲覧、編集すべての点で最適 
  何なら良くて何がダメなのかハッキリさせておかないと何度もやり直す羽目になるパターンだな 
 >>635   明日の昼くらいの時間に=Now()を小数点表示させてみます!感謝です! 
  昨日Sessionで「トランプの影響力低下」 
 >>640   通じないなら通じる人が答えるから通じない人は黙ってればよくね? 
  >>642   セルの書式との組み合わせだから、セルの書式を意識しないと「標準」ではまる。   
 Excelの「標準」はExcelだけにしかわからないから、Excelで閉じた世界でないから使わない方がいい。 
  配列=range("A1:C3") 
 >>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辺りでもなにかできそうかも?と考えたけど、 
 全然できないかもしれない 
  オブジェクト指向って 
 >>651   >みたいな事でしょうか?  
 それはメソッドチェーンという記法で、オブジェクト指向言語から生まれた副産物 
 一見便利で、実際これが無ければVB/VBAはとっくに廃れていたと思われる 
 ただしメソッドの呼び出しと中間オブジェクトの生成で毎回コストが掛かるため、 
 複数同じような処理を書く場合は一旦適当な変数で受けるか、VBAの場合はWithステートメントでまとめた方が良い 
  オブジェクト指向の原理主義的には、関数の戻り値はあまり積極的に使用すべきではない 
 >>653   「関数」という自分しかわからない用語の定義で話すのはやめろ 
  オブジェクト指向には大きく分けてクラスベースとプロトタイプベースの2種類の流派がある 
 >>651   エクセルvbaの場合、オブジェクト指向かどうかは考えなくていいよ   
 オブジェクト指向かどうかは、オブジェクトをメインに据えるかどうかによる 
 しかしエクセルvbaは「エクセル」という超巨大なオブジェクトが中心なので、 
 普通に書いてたら勝手にオブジェクト指向になる 
  そもそもWindowsというOSを使ってる時点で、すべてのアプリは「Window」オブジェクトの上で転がってるだけ 
 オブジェクトの設計図そのものを作って組み合せていくスタイルがクラスベース(C++やC#など) 
 sheetクラスを継承できれば・・・ 
 VBAのオブジェクト指向機能は、あくまでCOMを使うために設計されてると言っていいよ 
 できないからやらないだけできるなら派生とかやりまくってると思う 
 現代的なオブジェクト指向ではクラスの継承はあまり使用せずインターフェイスを使うので、クラスを派生できないこと自体はそれほど問題ではない 
 オブジェクト指向は考え方の一つとして知っていればいい 
 VBAのたとえなんちゃってオブジェクト指向でもクラスは普通に便利じゃん 
 オブジェクト指向の話は自分にはまだ早かったようです。 
 画面表示後に後続のコードを実行させたくないなら vbModal にしないとだめ 
 >>666   vbModeless は単純にユーザーフォームを表示したままEXCELシートを編集できるようにするか 
 否かなので、入力待ちのような場合には不要ですね。 
 本来の使い方というか、特徴からしてフローティングツールボックスみたいなことができる感じ? 
 Photoshopとか見たことあるとイメージしやすいかな。。。   
 必要かどうかは置いておいて例えば、、、 
 複数のマクロが作ってあるEXCELファイルでシート上のコマンドボタンでマクロ呼出ししようと 
 すると当然、別シートに移ると使えなくなるけどvbModelessのユーザーフォームに作っておけば 
 シートを移ってもボタン一発で呼び出せる、みたいな? 
 あとはテーブルがいくつか作られているシートでテーブルを渡りながら編集する必要がある場合、 
 目的のテーブルのみを表示させるマクロを登録しておけば簡単にアクセスできるようになる、とか。 
 どちらもどうでもいい使い方だけどw 
 ユーザーフォームとのデータの受け渡しならココを参考にしてみては?  
 関数化して引数でやりとりしてしまえばいいような気がする。。。  
https://excel-ubara.com/excelvba3/EXCELFORM010.html    >>667 >>668 
 ありがとうございます。 
 パブリック変数よりFunctionの戻り値をうまく使うっていう方がいいのですね。 
 UserForm_Initializeもいらなくなりそうですね。 
 フォームが増えていくとフォーム毎に渡すよう受け取るようのパブリック変数作って 
 ちょっと管理しづらいなと思っていましたのでいい勉強になりました。 
 Hideも使っていきます。 
 モーダルだとフォーム出てる間、タッチパッドの二本指スクロールが正常に動作しなくなるので 
 そのためだけにモードレスに魅力を感じていました。 
  >>668   ちなみにそのサイトにあるdoModalというフォーム側に書くパブリック関数名ですが。 
 今試したところ、標準モジュールと違ってPublic Subで同名のdoModal関数を 
 フォーム毎に一つずつ名前重複エラーにならなかったんですが、これを仕様として受け止めて 
 フォーム側の呼び出し関数を全部同じ名前にしてしまっても安全でしょうか?   
 フォームが5個あるとして、別々の呼び出し関数を作るのは名前を憶えれないどうせ 
 呼び出し時には 
 標準モジュール側で 
 受け取る変数名 = FormName.doModal(引数1,引数2) 
 みたいにするので別にdoModalにこだわりませんでが 
 フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか? 
  >>670   標準モジュールに宣言するPublic関数とは違って 
 ユーザーフォームに宣言するPublic関数はユーザーフォーム名.XXXのような記載をして呼び出すので同名の関数でも構わない 
 (XXX単独では呼べない) 
  >>670   VBEの画面でF2を押下するとオブジェクトブラウザが表示されるから 
 自分で作った変数や関数がどういう管理をされているかみてみるといいかもね 
  >>670     > みたいにするので別にdoModalにこだわりませんでが 
 > フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか?   
 頭にshowをつけてユニークな名前にすることは個人的にはよくある。 
 initializeはつけたことないけどユニークな名前なら平気なんじゃないかな。ただVBA側で用意されている名前に酷似してしまうから避けるけど。 
  >>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の次の行に制御は戻るのに、モジュールレベルの変数は 
 値をクリアされてしまうのですね。 
 とりあえずグローバルのやりとりは卒業できました。ありがとうございました。 
  オブジェクト指向では 
 >>676   多態性とは… 
 プログラムの経験が浅いとイマイチ具体例が出て来なくてモヤモヤっとした状態から抜け出せませんね。 
 VBAはオブジェクトは作れないけど、元々作ってあるオブジェクトの利用は出来るんですよね?多分 
 as objectとされるものは大体、オブジェクト名.プロパティ名とかオブジェクト名.メソッド名みたいなの持ってますよね。   
 継承というのは、Range.InsertとRange.EntireRow.Insertみたいな親クラスのメソッドを 
 引き継いでる子クラスみたいなことなのでしょうか。 
 今の経験量ではどれだけリファレンスサイトを読んでもピンときません。 
 残念ですし、アドバイスを活かせず申し訳ないです。   
 オブジェクト指向と非オブジェクト指向の境目がわかるようになるまで深入りしないようにしようと思っています。 
  VBAはそもそもちゃんとしたオブジェクト指向言語じゃないから 
 そうね 
 vbscriptでwin32apiのキーダウンを使おうとしているのですが、 
 vbsのスレは気持ち悪いからねえ 
 でもパワーシェルはダブルクリックで起動できないって 
 >>684   バッチからPowerShell呼べばいいだけ 
  PowerShellのスクリプトは.ps1ファイル 
 >>680   そうなんかな? 
 VBAのデザインパターン扱ってる本なんて見たことないけど 
  オブジェクト指向の典型は、Ruby on Rails。 
 >>691   でも 
 日本ではVBAより平均年収安いって記事 
 前このスレに挙げられてたよね 
  また何かにつけて馬鹿馬鹿って連呼するヤツが来たか。揚げ足の取り合い、誹謗中傷スレになるのも時間の問題だな 
 Rubyはほんとにオブジェクト指向の学習に向いてるのに5chだとキチガイのせいで勧めづらい 
 新年明けましておめでとう 
 >>682   VBSからWin32api呼ぶのにVBA使わんの? 
  VBA使ってAPIコールするなら最初からVBAで作るだろ... 
 もう忘れたけどvbsの方がいい場面があることはある 
 >>705   流石にこの発言は馬鹿と言われても仕方ないな 
  Excelにかぎらなければこっちにスレがあるからこちらへどうぞ 
   VBAなんでも質問スレ Part3   
http://2chb.net/r/tech/1631184381/   >>708   質問するにはこっちのスレの方が平和的でいいな 
 このスレには人をバカにしてマウント取るような人間しかいないし 
  それはw 自分の発言読み返して反省しろよw 
>>705  はボケただけだろ 客席がドッ!と沸くトコだぞ 
 ガチでボケてるのか後出しでボケたことにしたいのか 
 どちらにせよ
>>710 が恥ずかしいことに変わりはないなw 
 スレの住人のカラーや雰囲気全然違ってワロタww 
 winapi使いたいならexe作れよ 
 >>712   ここにはスレタイも読めなければスレの趣旨も理解できずにただ雑談にくる人も多いからね 
 クソスレにしてるのはあなたみたいな人だって事を理解したほうがいい 
  >>703   エクセルのVBAだろ? 
 ワードのVBAなんか使わないぞ? 
  たまに勘違いしてVBの質問してくる人とかいるくらいだからな。 
 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 
 VBA知らないのですけど 
 >>720   オブジェクトのプロパティを書き換えたり取得したりする 
 超古い言語だよ 
  書き換えや取得してる間はコードの実行は待機し 
 >>722   書き換えや取得するコードを書く 
 やって見た方が早い 
  コールバックではなくCOMという概念で実際のところプロセス間通信している 
 >>724   色々あるみたいだけど、vbaで使う場面って思いつかない。ってかバグりそうでやらない方がいい気がしてならない・・・  
https://qiita.com/Kamo123/items/e676e0cbe6de83410980    Excelのオブジェクトを外部から弄るつもりならVBAよりもCOMアドインやVSTOアドイン、Office Scriptsなど別の方法利用を検討する方が良い気がする 
 >>722   その通り   
 データの書き換えしている様子も見えるから仕事しているなって気がしてくる 
  例外処理の悩みなんだけど、 
 オプションを変えれば標準モジュールで受けとれるんだけど切り替えが面倒 
 普段からオプション変えとけばいいんじゃね 
 みなさん、ありがとうです 
 >>727 様、ありがとうです   
 web系はユーザーの待機ストレスをなくすために 
 コールバックを多用しますけれど 
 事務系は一つの処理が終わってから次の処理に移るって 
 なんだかそんな感じを受けました   
 ありがとうございました 
 >>728   イベントはコールバックしかないですものね 
  外部取り込みデータでcsvファイルを 
 >>734   そのcsvメモ帳で開いて 
 本当に生データに半角入ってないの? 
  シートが2つあって、片方非表示にしようとしたら、最低1個は表示しろって怒られるの何で? 
 その非表示にする行が悪いんじゃないの 
 悪くない。 
 >>736   ブック2つあってその片方を丸ごと非表示にしょうとしてるとか 
  >>735   半角スペース入ってないです 
 アクセスから抜いてきたデータなんですけど、何回やっても入るんですよね 
  もうACCESSに直接ADO接続して値取って来たら? 
 質問者がよくわからない現象だから質問してくるんだろうけどそういう人の質問だといまいち状況がつかみにくいから 
 >>742   結局、全部にトリムすることにしましたわ 
  総合スレからこちらに誘導されて来ました 
 >>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 
  >>746   これを機にVBA使いになりましょう 
 そんな難しくないですよ   
 まずはダミーデータと 
 マクロで記録したコードを張ってみてもらえますか? 
  >>747-748     ありがとうございます   
 マクロ記録はボタンを押すだけなので簡単ですが 
 VBAになると一気に難易度が。。   
 1980年代のDOSの前のBASICはちょろっとやってたので本気出せばなんとかなるかもですが   
 分かりやすい書籍、動画、講座とかありますかね? 
  そも、縦書きと横書きという独特の言い回しが相手には伝わりにくい  
 >>750   打ち出しているのは零細企業の売上報告資料です 
 経営陣と上司が高齢者なので今まで長年使い続けて来た会議資料のフォーマットは原則何も変えてはならないという前提の作業です   
 売上が得意先の売上高順に並べられている資料で 
 右側に売上の内訳があります   
 単純にA4縦をA4横にして印刷するわけでは無くて列の削除が2列必要になり、その列を単純に削除すると関数が埋められてるのでエラー表示になるので、手作業だと毎回大変だったので、マクロ記録を使って自動的に印刷出来るようにしました   
 ところが一つだけ上手く行かなかったのが 
 今回の印刷範囲の指定でした   
 簡単な例を作成中なので後でアップします 
  >>750   毎日こんな表を作成しています    
  >>750   そして毎週こんな感じで縦向きの印刷をしています(右側の内訳は不要)    
  >>750   そして毎月、売上が確定するとこんな感じで横向きの印刷をします   
 列の削除が必要となります    
  ほんとは 
 >>752   の上の表と下の表の間に担当者別の売上集計表があるので毎月、列の削除は行えずに右側の内訳をスライドして値複写して整形する必要が有ります   
 この作業が地味に面倒なのでマクロ記録で自動化しました 
 >>749   Console 0,25,0,1とかで始まるやつか 
 文法こそ同じような部分はあるけど全くの別物だぞ 
  最初で最後のプログラミングが 
 レコード総数どのくらいか判らんけど、回答待ってる間に別シートにコピーして並べ替えするだけで済むような https://forest.watch.impress.co.jp/docs/serial/exceltips/1306514.html   単なる受け売りじゃ応用利かなくなるだろうし   数字掴むのはパワークエリやパワーピボットでなんとでもなるんだけど 
 >>754   改めて考えたらこの横向きの印刷は苦労して無かったんだった  
>>752   のシートを新規シートにコピーしてから不要列を削除してプリントするマクロ記録で出来るので   
 問題は  
>>753   の印刷です   
 この表の下に2月分の納品予定、3月分の納品予定、4月、5月と続いていくので最終行を指定する事は出来なくて 
 印刷したい範囲はあくまでも当月の1月分までなので 
  >>752-754   1 日次を人間が更新 or 印刷 
 2 1を元に週次で印刷 
 3 1を元に月次で印刷 
 ということなら、シートをあらかじめ上記3つに分ける方向で考えた方がいいんじゃないかね 
 ご存知かもしれないけど「Excel VBA やりたい事」でぐぐれば大抵の事は出てくるよ 
 取り急ぎ動的な範囲選択の記述の仕方とか判ればVBAの文法とかあやふやでも全然いけそうだけど 
  >>763   ああ、なるほど、確かに 
 固定フォーマットに数字だけ行くように出来れば良いのかなと思ったけど 
 会社も毎月変わるから難しいかな 
 あと売上高の多い順だし 
  何度も聞くけど「印刷範囲」の設定ってどうやってる? マウスで印刷したい範囲をドラッグ選択して印刷範囲に設定するだけなんだけど? 
 必要な情報を配列に入れ込んで 
 >>765   いや、だから関数とか印刷範囲の設定で済まないので悩んでいるわけです 
 それだけで済むならマクロ記録で終了です   
 不要範囲の削除で関数の連携が無くなるから 
 数値コピーしたり 
 手動の整形を伴うのと   
 毎月売上の会社は一定じゃないし 
  >>766   元データを失わないように 
 元データからマクロで読み込んでコピーファイルを作成して、そこで作業を行ってから終了時にマクロで元データに書き込むようにはしています。。   
 売上の最新情報は他の人と共有しているファイルになるので、これもコピーファイルを作成してからデータを新しいシートにコピペして、パワークエリを使ってそのファイルから読み込んで毎度自動更新するようにしています   
 定形フォーマット(シート)を使ってVBAで行数を決められると確かに良いですね 
  >>768   なんか頭のハゲた人がいっぱいいそうな会社だなあ。 
  ダメだこりゃ 行や列の非表示とかも知らなそう 
 >>770   いやいや他の人はともかくあなただけ異次元にレベル低い 
 パワーピボットとか使って無いでしょ 
  >>770   他の優秀な方は皆さん理解出来るのに一人だけトンチンカンなVBAスレにいてはいけないレベルのような   
 列の非表示をしたらその下の担当者別の列まで非表示になるから 
 範囲指定や非常時でなんとかなるレベルじゃないでしょ   
 じゃあなたにVBAの質問して答えられるのかな? 
  >>770   元ファイルは自分だけの使っているファイルだから問題無し 
 共有ファイルは参照するだけで元には戻さない  
 なんで書いてる事を理解出来ないのかな 
  >>774    ほんとは表示がなんでも良ければ 
 >>752   こんな内容はパワークエリとパワーピボットで、何もしなくても常に最新データに書き換えられるんだけどな。。 
 といつも思いながらEXCELの加工してます 
 >>752   連想配列、多次元配列を使えば、好きな項目を紐づけでき 
 表示も好きなようにできるので楽だと思います 
 一度覚えたら重宝しますのでいつか学んでみたらいかがでしょう? 
 VBAの学習はネットで十分ですし是非   
 例えばシートから顧客名を取得して 
 顧客名をキーワードにして、製品名、単価、数量、担当者名を配列に格納し 
 単価×売上高の多い順に配列をソートして、配列から必要な表示項目だけセルに代入する 
 そうやって処理すれば担当者別であれ製品別であれ好きなように表示できます 
 その後、罫線処理をして、最後に幅調整をしてあげればって思います 
  >>780   あまりにも馬鹿過ぎるから馬鹿と指摘しているのだが 
 こんなのしか雇えないから零細企業のままなのか、零細企業だからこんなの雇っちゃうのか 
  >>782   あ、 
 (ワッチョイ 53da-Jpma)   
 がスマホで書いてるだけか 
  馬鹿の質問はそもそも馬鹿が考えることだから問題解決へのアプローチが間違えている 
 >>781   ありがとうございます   
 他は全てワンボタンで済んだので 
 あと表示だけが手動なので 
 そのために時間掛ける価値があるかどうテンピンに掛けながら 
 でもこういうのは嫌いじゃ無いので学んでみます 
  >>786   わかる。こういう奴に任せるといつまで経ってもまともな成果が上がらない。 
  >>789   なんかスレッドが熱いですけど気にせずがんばってください   
 配列はデータベースみたいなものなのでエクセルと相性がいいんです 
 とても便利ですので是非がんばってください 
  煽るヤカラに反応してるとスレが荒れていつも回答してくれる人も敬遠しちゃうぞ 
 月別のレイアウト範囲を決めるなら参考の表なら 
 開始は「月売上高表」の文字列が入っている行 
 最後は「納品予定」の文字列が入っている行を見つけて最後の金額が入ってる行を取得すれば
>>747 のコードが流用できるんじゃないの 
 >>791   早速、YouTubeの金子さんの動画を見ました 
 今まで外国語に見えてたのが理解出来て来ました 
  >>792   ありがとうございます   
 最終行に、色を白で「最終行」と入れて 
 それを拾おうかと 
  >>789   もし嫌じゃないのなら才能というか適性あります 
 VBAから入ってある程度楽しいなって思えたら 
 pythonとかjava、C#とかやってみたらいいと思います 
  >>792   その印刷したい最後の行≒「途中の行」の場合はどのように指定したら良いんでしょうか?   
 売上先の数が毎月一定では無いので印刷したい最後の行が毎月変わってしまうのです   
 「売上最終行」「売上最終列」 
 「納品最終行」「納品最終列」 
 を透明な文字で埋め込んで認識させるのが良いのかなと 
  >>796   もともと1982年にマイコン(パソコン)を買ったくらいなので好きな方だと思います 
  >>797   vba 最終行 
 vba 最終列   
 でぐぐる 
  >>799   ありがとうございます 
 ググりましたが本当の最終行の説明しか無くて   
 上に書いた通り、実際には途中に存在する 
 任意の最終行(実際には途中の行)の説明が無いのですが 
  >>797   どれを印刷したいのかよくわからんけど 
>>752-753  なら納品予定の列を見て空になった行のひとつ上、
>>754  なら得意先名の列を見て合計となって行までを印刷すりゃいいんじゃないの? 
 って
>>792 は言ってるんだが? 
 そもそも 
 > 印刷したい最後の行≒「途中の行」 
 とか意味不明すぎる 
  マクロを使ってそのシートを新規シートにコピーしてから不要行や不要列を削除して、その後に最終行と最終列を指定して印刷すれば良いのかな 
 >>802   言葉でそのように説明するのは簡単だけど 
 具体的にVBAで書けますbゥ? 
  毎日 
 もう一度書くと 
   作成しているのはこの表      
 >>806   806の赤い部分にも文字が入ってるとして     
 印刷したいのは806を元にして 
 これらが印刷結果となるように        
  実際の数字は販売管理ソフトから吐き出したデータをパワークエリとパワーピボットによってリアルタイムにデータを見ることは出来ています 
 20年前からパワークエリやパワーピボットが存在していれば、その結果を元に報告資料を作っていたんだろうけど、存在しない時代に手動で作成していたのでそれに合わせる事に苦労してるということです 
 >>804   >>807 の表はできてるんだろ? 
 得意先名の列がB列としたら 
 Dim Row As Long 
 Row = 1 
 While Cell(Row, "B").Value <> ”合計" 
   Row = Row + 1 
 WEnd  
 ってやるだけだろ 
  >>810   ありがとう 
 行か列を任意を指定してキーワードを見つければ良いんですね      
>>811   BASIC自体を知ってるのでは無く 
 その当時、マイコンを買って 
 雑誌の記事を見て自分用にカスタマイズしただけ 
 主にカセットテープから20分くらいLoadしてゼビウスとかやってた 
  適当に打つとsyntax errorが出てくる事は知ってる 
 連想配列のコレクションを使いたいんだが、個別の要素が書き換えられない。 
 >>806   自分が何もできないから100%他人任せにしてるような割りに態度が少し横柄なんじゃねと思わなくもないんだよね 
 少なくとも
>>806 の月別の表が何か月分も同じシートにあるのであれば 
 ・シートを2つコピーして
>>807 用の2つのシートを作る 
 ・それぞれのシートで1行目から最終行まで検索する 
 ・月別の始点はA列?の「月売上高表」の文字列が含まれる行 
  終点は次の月の「月売上高表」の文字列が含まれる行の-1 
  ※ただし最終月は翌月の文字列が見つからないので最終行でよい 
 これをもとにそれぞれのシートの行を非表示にしたり、列を非表示にして 
 印刷範囲決めたらいいだけなんじゃないの 
 ここまでの説明はマクロで可能 
 俺はやる気のあるコードを見せてくれたりする人には付き合う気はあるけど 
 100%他人任せには構ってられないから以降は他の人が回答してくれることを祈るわ 
  >>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 
 のように中身をコピーして作る 
  また零細企業の馬鹿が粘着してるのか 
 >>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 
  これでmain関数の中のarrにすべてのデータが取り込めた 
 >>820    >>821   どの程度の大きさのデータを印刷したいのかわからないですが 
 サンプル程度のデータ量でしたら配列を使って取り込みと出力をして 
 印刷設定はエクセル側で行えば十分かと思いましたけど 
 それではあまり役立ちませんか? 
  >>822   印刷設定をEXCEL側とは? 
 毎回手動で設定して印刷という話ですか? 
 データ取り込みは苦労していないというか既に自動化は諦めてるので   
 未納品状態から納品済に変わった段階で 
 下から消して上に書き込む作業を行わないとならんので。。 
  >>823   よく理解してなくてすみません 
 rangeの範囲指定だけ指定できたらOKなのでしょうか?   
 例えば、 
 Range("A1:I69") 
 printArea="$A$1:&i%69" 
 を指定したいってことでしょうか? 
  >>819   1オリジンのRangeオブジェクトと0オリジンの配列のやり取りはどうやっても混乱するから 
 セルを配列に取り込む場合は「array = Range(範囲).Value」のようにRange.Valueで取り込んだ方がいいよ 
 これでRangeで指定した範囲の値が1オリジンの2次元配列として取得できる 
 逆に配列をセルに書き戻す場合も、Rangeとarrayの要素数が同じなら「Range(範囲).Value = array」で済む 
 これはVBAでシートを配列で扱う場合の常識だと思うので一応 
  おいおいおいおいw まーたハナシが変わって来てるw ま、それがこの人の個性っちゃあ個性だけどw   >>824   印刷したい印刷範囲の右下が毎回変わるので   
 例えばそこに 
 「END」という透明文字を書き入れておく場合にはどのような記述となりますか?   
 これさえ出来れば自分のやりたい事が出来そうです 
  >>826   同じ取引に対してデータ元が2つ有り   
 パワークエリとパワーピボットで自動取込をするのは販売管理ソフトのデータからが1つ目 
 こちらは自動的に取り込まれていて 
 簡単に得意先別、担当者別、商品別の合計や詳細は把握出来る     
 EXCELで報告資料を作る元データは、他の人が社内共有用に作っているEXCELファイルから   
 この2つのデータが合っている事を確認する必要もある     
 最初の質問から有りとあらゆる事を書き出すなんて無理だよ   
 後から話が違うと言われようが 
 説明するために簡便化した資料でやってるんだし 
 てゆーかあなたはVBAの技術は無いんだから無理に話に加わらなくても良いよ 
  で、それはVBAで出来るならそれでもいいけど、普通の機能でも十分賄える作業 
 販売管理ソフトに全ての詳細情報を付加する機能が無いから、会社に必要な付随情報をEXCELで付与して管理させている 
 >>827   Sub main() 
     Dim rng As Range 
     Set rng = Range(Cells(1, 1), Cells(2, 2)) '①   
     ActiveSheet.PageSetup.PrintArea = rng.Address 
 End Sub   
 みたいな感じで、①を都度指定したらできませんか? 
  >>829   そんな事するよりも    
>>827   これを一発VBAに入れた方が楽じゃね? 
  EXCELのデータが正しい事もあれば 
 一元管理は入力ミスがあるとそのまま行ってしまう恐ろしさがある 
 >>827   最終行列を取得して範囲指定するのなら 
 cells(rowscount,1).end(xlup).row 
 cells(1,columns.count).end(xltoleft).column 
 で最終行列を所得できます   
 キーワードを使った場合、 
 cells.find('end')でオブジェクトを取得しますけど 
 他のセルにキーワードが紛れていたら終わりますので非推奨かもですね   
 キーワードを最終セルにするというのなら 
 findを使って最終セルを取得して範囲指定に利用できそうですね 
  >>831     単純に印刷したい範囲の右下に 
 ENDとか※とか右下とかの文字を入れ込んでおいてそれをVBAにするのは難しいものなのですか? 
  そもそもが、全体のデータをどう扱うかのイメージが出来ていない  
 >>836   すんません 
 入れ違いで書いてしまいました 
  >>838   仕方が無いじゃん 
 自分で作ったシステムじゃないんだし 
 前任者が全て手動で半日掛かった仕事を5分で出来るようになっただけでもマシになったとは思う 
  >>839   いえいえ、こちらこそ要領が悪くてすみません 
 findでキーワードを検索して、該当セルを取得したら 
 そのセルが何行目何列目なのかを取得できますので 
 それを
>>821 の範囲に利用してみたらいけるかもですね 
  >>838   月に一回だけ 
 ENDと入れるだけで 
 一ヶ月にかなりの時間を節約出切るのが分からない??   
 行や列を挿入するだけだから 
 ENDと入れるのは一回だけ   
 なんなら前月のシートを使えば、それすら要らなくなる   
 ほんとお前は性格悪いね 
  >>841   キーワードを 
 ピロリちゃんとか 
 絶対に使わないであろう言葉を使えば良いかもですね 
  縦向きえんど 
 >>844   そんなことより「ハゲでも分かるExcel VBA入門」という本を読めばいい。 
 分かりやすくてすぐ上達。 
  >>835   入力チェックはまた別の話 
 帳票毎にデータが違う方が怖いわ 
  >>817   レスサンクスです。 
 ということはYukkuriが100人いたら、 
 Dim Yukkuri?? As New Dictionaryを100行要るてことになるてこと? 
 timeline.Add Yukkuriのところで、timelineが使ってるメモリが追加でアロケートされ、 
 そこに連想配列が追加されるていう動きにならんのかね? 
 それか連想配列の実体をコピーできるとか。 
  >>846   ところで会社で嫌われてない? 
 その方が心配だわ 
  >>848   別の話だろ 
 Excelと販管ソフトに個々に入力してるから安心とか言うならそれは単に二重入力してミスを見つけてるだけの話    
>>851   まあこんなことを言い出すやつなんだろうけどw 
  >>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 
  >>853   2つにそれぞれ意味があるから良いだろ 
 ソフトは客先に納品書や請求書をプリントしたり、EXCELは社内の全ての管理をしやすいように情報付与、そしてその2つが在る事でどちらのかの入力ミスを防げる 
 この仕組みで会社が儲かってるんだからケチ付けられんわ俺も 
  >>814 は恐らく連想配列が欲しいわけではなく、 
 javascriptやpowershellにあるような動的なプロパティが欲しいんだろう 
 VBAではそういう便利なものはないので基本ノードデータにジャグ配列を使って 
 ノードの先頭にプロパティ名に相当するタグを付けていった方が記述量的にも混乱が少ないと思われる 
  >>814 の意図を汲んだデータをジャグ配列のノードで表記すると恐らく以下の様になる 
 dim timeline_root 
 timeline_root = array("timeline" _ 
   ,array("Yukkuri", array("Name", "霊夢"), array("serif", "霊夢です")) _ 
   ,array("Yukkuri", array("Name", "魔理沙"), array("serif", "魔理沙だぜ")) _ 
 ) 
 配列の要素0に必ずタグ名が入るようにすれば、HTMLのDOMツリーのように一環した探索ロジックが組める 
  >>857   やろうとしてることは、ゆっくりムービーメーカー4の定義ファイルをVBAで編集すること。 
 ゆっくりムービーメーカー4の定義ファイルはJSONになってて、 
 VBAではJSONが使えないから、誰かが組んだVBA-JSONを使うと 
 JSONがVBAのコレクションやディクショナリー(連想配列)で作られたデータになる。 
 そこなかで、セリフが定義されてるを連想配列を複製してセリフ書き換えてくてことをやってるんだけど、 
 VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、 
 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。 
 ただ、試行錯誤していたら 
 一旦同じ連想配列をaddしたものを作って、 
 それをjsonにして、またそのjsonを連想配列に戻してやれば、 
 別メモリが割り当てられた連想配列が出来上がった。 
 そのあとは個別に要素を書き換えられる。 
 javascriptとかは 
 .配列.push({...Yukkuri[0]}) 
 とかやれば行けたんだが、VBAは無理なのか。 
  >>858   処理対象がjsonなら最初からそう書けばいいのに 
 いくつか手段はあるけどVBAでやろうとすると結局面倒だし特に理由が無いなら他を検討してみては 
 VBA-JSONの使い方の話なら俺は知らん 
  >Excelと販管ソフトに、個々に入力してるから安心 
 例えば、銀行のシステムでも、2つのオリジナルを持たない。 
 >>861   知らんがな 
 システムの良い悪いの判定なんてお前らに求めて無い事を察しなさい   
 俺以外の社員含めて理不尽な事をやってるなと思いながら仕事をしてるんだから   
 70歳の引退予定の上司に言ってくれ   
 そいつがいなくなればスッキリさせる 
  >>862   例えば3人で販管ソフトに入力したとして 
 その販管ソフトの仕様により、会社の必要とする情報を持てない場合はどうするんですか? 
 そもそも一人しか人的資源が無い場合はどうするんですか? 
  >>872 さんはキーワードで所望の範囲指定はできたのでしょうか? 
  >>865     変数を定義して範囲の右下のキーワードを拾って   
 ActiveSheet.PageSetup.PrintArea =    
 のところにその定義した変数を入れてやるという理屈で合ってますよね?   
 後はフサフサでも分かるEXCEL VBAの本が到着してから勉強します 
  >>858   > VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、 
 > 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。 
 だから新規に作ってコピーしなよって書いたのに... 
 コードまで書いたのに無視するんならもうさじ投げるわ 
  >>869   新規に作るていっても、複雑な連想配列の塊をどうやって作る? 
 サンプルはたかだなNameとserifしかキーがないけど、 
 キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。 
 しかもその構造が動的だったらお手上げ。 
  質問スレに回答してくる人は善意でやってるだけで最終的に自分で解決できないならあきらめろって話 
 >>870   > キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。 
 > しかもその構造が動的だったらお手上げ。 
 お前にはお手上げなだけだろw  
>>854  に "Name" とか "serif" なんて書いてない、キーを動的に取得してコピーしてることすら読み取れないレベルなら諦めたほうがいいと思うよ 
  マクロでやりたいなら行数が最大になるパターンで書式作っておいて、そこにデータ入力、不要な行の削除でそのまま印刷すればよくね? 
 >>872   すまんできたわ。 
 ありがとう。 
 Set Yukkuri1 = New Dictionary 
 を書く位置を間違えてた 
  またVBAが壊れた。 
 vbaが壊れるという表現が分からない 
 先週までは問題なく動いていたブックを開くと、 
 過去に学んでこの際だからぜんぶ変えてしまおう またいつアプデ地獄に巻き込まれるか知れたもんじゃ無いし 
 https://qiita.com/Q11Q/items/7a9d4c89726cfaa7abd6   「VBAが消えてしまった!マクロが壊れて動かない!」 
 ACCESSで、NLSの問題でカナ含むVBAモジュールが開けなくなるってのはあったな 
 >>881   ああ、そういえばIMAGE関数が家庭向けサブスクにも配布されたからと、 
 日曜日にExcelをバージョン2301に更新したんだった・・・ 
  これが原因かどうかはまだ分からないけど。 
  Office Insiderには参加していない。 
 >>886   10年ぐらい前、変数を日本語名にしてると一切動かなくなるってバグがあったな 
 確かACCESSだった 
 変数を日本語名にしても、あまりいい事はないと思う    
>>878   あと、この方法はあまり良くない 
 一度壊れたブックは、内部的にゴミデータが残っている可能性がある 
 使いまわすと、そことバッティングする可能性がある 
 新規ファイルを作り、シートを一つずつコピー、vbaもテキスト単位でコピー、 
 といった感じで作り直した方が良い 
 めんどくさいけど、やっておいた方がいいよとは言っておく 
  >>887   > といった感じで作り直した方が良い   
 やっぱり・・・orz 
  ドイツのプログラマーが、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 
 に変えるとコマンドラインウィンドウが出なくなる 
 Dim a As Long 
 Dim a As Single 
 フサVBAの本が届いた~ 
 >>889   どうしてわざわざEdgeをチョイスするのかと 
  Edgeと言いながらプロトコル的にchronium系共通だし 
 他社との業務連携用途とかだと他の選択肢が無かったりする 
 質問です 
 文字列の演算をエラーにする方法は無いでしょうか 
 >>903   お、マイナスだとエラーになるんですね! 
 ・・・ならんやないかーい 
  皆さんはお仕事何されてますか 
 エクセルのvbaエディタ?がすごくつかいずらくて、 
 >>906   よく分からんけど逆にVSCでCP932使えば良いのでは? 
  >>902   質問の意味が分からんけどそもそもabcをStringにしてるのはなぜ? 
 c = a + bに3と戻したいならc = Val(a) + Val(b)とでもすれば 
  > Str a 
 >>905   転職なら早い方がいい、年齢が若ければ新しい職場にもすぐ慣れるだろうから 
  >>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関数を使いたかったんじゃね? 
 書き方間違えてるから謎の言語になってるけど。 
  Transposeで作る配列の 
 >>902   (1)たとえセルの書式が文字列でも 
 (2)数字っぽい内容だと 
 (3)勝手に数値型に変換されてしまう  
 何がやりたいのか、ぼかさずに具体的に説明してくれないと無理 
  >>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 
  >>915   それなら素直にlongで宣言するべきでしょ 
 変数名間違えた時の保険って、紛らわし変数名にするなって話だし 
 変数名間違えたときのための保険って言い出したら何も出来ないじゃん 
 じゃあその「変数名間違ってたときの確認のためのコードの」変数名が間違ってたらどうするの? 
 その確認のための変数名確認のためのコードをつけるのか? 
 それが間違ってたら? 
 確認のための変数名確認のための変数名確認のためのコードをやるの? 
 って話になる 
  >>916   逆で、文字列を数値として使ってしまった場合に検出したい 
 単にタイポ時の保険としてエラーが起こってほしいってだけだよ 
 vbaに無いなら仕方ない、そういう言語なんだなってだけで 
 別にそこには期待しないよ 
  少し上にいた大量にレスしてた奴みたいなおかしな質問者もいるし 
 >>915   とりまOption Explicitは入れとけ 
 それ以上はVBA単独ではどうにもならん 
 型安全な処理系と組み合わせろ 
  >>917   あのさぁ、自分の説明が下手くそなくせにできないのは他人のせい、言語のせいにするのはよくないぞ 
 単にタイプミスって言っても自分がコード書くときにミスしないようにしたいのか、使う際にinputBox等で入力させるときにミスをなくしたいのかで全然違うだろ 
 エスパーじゃないんだから質問するならもっと具体的にしろよ 
  >>921   いやinputboxなら全部文字列だろ 
  ExcelVBAは型に対する考慮が緩いから正直期待にそえる回答はないと思うよ 
 >>923   だから、最後までちゃんとかけや 
 それはinputBoxを格納する変数の話だろ 
 そんな話はしてないわ 
 色々な具体例があって様々な解決策があるのに、なんにも具体的な話を出さずに抽象的に話しして、一部に対してだけ反論してお前は馬鹿か? 
  >>924   ですよね 
 ありがとうございました    
>>925   質問を理解できないアホw 
  つーか 
 >>926   え、
>>924 で解決したのか? 
 ってことはマジでOption Explicitをつけてなかっただけ? 
 そこまで超ド初心者だとは思わんかったわ 
  やっぱり 
 IF Not Isnumeric( a + b ) then c = a + b 
 a = 1 の暗黙の型変換でエラーにしたいならそう言えよ 
 >>928   なれると初心者の質問だって見抜けるようになるよ 
  質問が雑だと回答する側は色々考えるからこういう感じになるんだよ 
 そんなの期待するだけ無駄 
 零細企業のアホみたいな奴に答えてやろうなんて思うから荒れる 
 てゆーかそんな事を言うやつがわざわざこんなとこ見るなよ 
 そもそも 
 相手にしたくないならほっておけばいいんだから無駄なレス書いて荒らすなよ 
   >>926   サンプル書けばわかると思うけど例えば下のようなコードは最後の数値型に数値以外の代入のみエラーとなるからコーディングミスしないように注意するしかないという話 
     Dim a As String 
     Dim b As Long 
     a = "a" '文字の"a" 
     a = 1 '文字の"1" 
     b = "1" '数字の1 
     b = "a" '変換エラー    
>>928   そういう話じゃないと思うぞ 
 キチンとString型を宣言しているなら確か 
 >>944   >+は文字列連結の意味になるんじゃなかったっけ? 
 ならないよ 
  >>946   !?  
 どうなってんだ? 
  >>944   > - 0とか*0とかすればエラーになるんじゃないかな? 
 暗黙の型変換がある以上、数値として認識できる文字列が入ってたらエラーになるとは限らん 
 VBAは型宣言はあるけど、Variant型と暗黙の変換があるから、絶対とまでは言えないのだよ    
>>947   イミディエイトウィンドウの内容なんて書き換えできるからな 
 釣りじゃないってんならちゃんと詳しい環境かいてみ 
  >>944   >+は文字列連結の意味になるんじゃなかったっけ? 
 JavascriptやRubyの話だね 
  演算子一覧表 
 https://support.microsoft.com/ja-jp/office/e1bc04d5-8b76-429f-a252-e9223117d6bd     連結演算子 
 & 2 つの文字列を組み合わせて、1 つの文字列を作成します。 
 + 2 つの文字列を組み合わせて、1 つの文字列を作成し、Null 値を伝達します (一方の値が Null の場合、式全体が Null と評価されます)。 
 VBAはあまり書かなくて理解足らないのは承知しているが、 
 全ての行に「Debug.Print TypeName(arrs)」を入れてみると何でダメかわかってくるかもね 
 >>951    ありがとうございます。 
   >>954   JSなら。こんな感じ。 
 var arrs = []; 
 for (var i=0; i<200; i++) { 
   arrs[i] = i; 
 } 
 >>952 ,
>>953   ありがとうございました。VBAの配列は癖が強いねえ。 
  >>955 のコードはarrsは配列として宣言するような代入してるけど  
>>951 は配列の宣言がどこにもないからね 
 癖というよりも単なる勘違いでしょ 
  >>953   200個の要素数が確定されている場合ですかね。 
 将来配列の要素数が変わることがわかる場合、 
 どうなりますか。   
 うーん。 
 VBAで配列操作するより、セル関数でデータを加工していった方が早いし、 
 分かりやすい気がしてきた。 
  >>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」が正しいんじゃない? 
  >>960   DimRedimは先に回答した人がいるから   
 >VBAで配列操作するより、セル関数でデータを加工していった方が早いし、 
 >分かりやすい気がしてきた。   
 用途にもよるが分かりやすさとしては間違いなくそう 
 VBA分からないやつでもどんな操作をしているか分かるのはでかいし 
 特異なケースのテストもわりと少ない手間で試せる   
 データの成形入れ替え並び替えは全部関数でやって 
 そうすると関数の参照先シートを変更する度に重くなるから 
 マクロでは関数が入ったブックの呼び出しと 
 操作するデータを参照先シートにコピペする作業を任せる   
 こんなやり方もあり 
 一応配列格納のほうがいちいちセルの読み取りしない分速いことは速いが 
 VBAで書き出す手間とエラーチェックの手間と 
 仕事ならそれを誰かに引き継ぐことを考えると…って感じ 
  ありがとうございます。 
 別に要素数が不確定ならそれなりの組み方があるけどな 
 わかった気で勘違いしている馬鹿の間違いや馬鹿さ加減を指摘したら泥沼になるだけだから相手にしたらいかんということだよ 
 つまり、
>>965 を相手にしてはならんということすね。 
 ありがとう。 
 >>963   まぁScripting.DictionaryかCollectionでも使えば? 
 二次元配列的な使い方をしたいならついでにクラスのお勉強もしておけばいい。 
 他にもRecordsetを使うという手もある。 
  >>967   結構、俺のこと好き? 
 匿名掲示板において個人を認識してもらえるのは書込み冥利に尽きるよ   
 愛情の反対は無関心だからな 
  愛される零細おじさんでつ 
 >>971   EB画面は知らんがスクレイピングじゃだめなのか? 
 売掛金のファイルがcsvならパワークエリで取り込めばいいと思う 
  ハイパーリンクを調べても、それじゃ無い って結論に至って質問してンのか? 
 あ、書き方が悪かったか 
 要するに販売管理のパッケージソフトや会計のパッケージソフトを起動させて全自動を追求したくなったという質問です 
 ファイルの意味判ってンのか? 基本のキが欠落してるような 
 >>980   お前は毎回理解力が無いな   
 既に先人が中途半端な仕組みを作ってるからそこに出力を合わせる事を考えてる 
 このやり方は後任には引き継がない   
 前任者の手作業を教えるq 
  >>977   この時点で読み違いしてるやん 
 会社でお荷物だろw 
  いけね、ついうっかり980踏んでた 
 >>982   お前は他のソフトを立ち上げることとそのソフトのボタンを押すことの区別もついてない時点で
>>977 以上のお荷物だろ 
 就職してるかどうかは知らんがw 
  >>986   は? 
 ボタンはEXCEL上で作った奴の話だぞ? 
 ソフトのアイコンクリックじゃないぞ? 
  あ、ハイパーリンクでソフトの起動まで出来るのか 
 >>987   EPSONの会計ソフトの話だろ 
 > 例えばEPSONの会計ソフトなら定番の資料は自動的に出力出来るのは知ってるが、今使ってるのは毎回、手作業でボタン押さないと出力出来ないんだよね 
 そもそもExcelのボタンの話ならそのボタンに紐づいてるルーチン呼び出せばいいだけだし 
  となると、そのソフトでダイレクトに帳票印刷のEXEファイルがあるならそれをリンクさせれば良いのか 
 >>989   いやEPSONは前職で使ってた奴 
 でも今のもその実行ファイルを直接起ち上げれば行けるね 
  >>991   お前の前職なんて知らんがな 
 とにかくそう言うことをやりたかったんだろ 
 としか受け取れないわ 
  でも一般のアプリケーションてその実行ファイルがどれか公開してる? 
 To: 各位 
 >>995   > でも一般のアプリケーションてその実行ファイルがどれか公開してる? 
 そんなことも調べられないならすっぱり諦めるなり人に頼むなりしなよ 
 
ID:ayeW68tCdのレス一覧:  質問者がよくわからない現象だから質問してくるんだろうけどそういう人の質問だといまいち状況がつかみにくいから 
 >>742   結局、全部にトリムすることにしましたわ 
  総合スレからこちらに誘導されて来ました 
 >>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 
  >>746   これを機にVBA使いになりましょう 
 そんな難しくないですよ   
 まずはダミーデータと 
 マクロで記録したコードを張ってみてもらえますか? 
  >>747-748     ありがとうございます   
 マクロ記録はボタンを押すだけなので簡単ですが 
 VBAになると一気に難易度が。。   
 1980年代のDOSの前のBASICはちょろっとやってたので本気出せばなんとかなるかもですが   
 分かりやすい書籍、動画、講座とかありますかね? 
  そも、縦書きと横書きという独特の言い回しが相手には伝わりにくい  
レス:1-200  201-400  401-600  601-800  801-1000  ALL  
このスレへの固定リンク: http://5chb.net/r/tech/1667104996/ ヒント: http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ  TOPへ   
 
	  
全掲示板一覧  この掲示板へ  人気スレ  | 
	Youtube  動画  
	>50  
	>100  
	>200  
	>300  
	>500  
	>1000枚  
	新着画像 一覧 )ネットワークプログラミング雑談 小学生プログラマだけど質問ある teratailもりあがっtail? 78問目  おまいらのクリスマスの予定は…  Rust part9  【.cmd】 バッチファイルスクリプト %14 【.bat】  くだすれDelphi(超初心者用)その55 推薦図書・必読書のスレ  PyQt5 Python 	 あなたのソースコード、みんなでレビューすれ 	 Excel VBA 質問スレ Part52 	 【iPhoneも】Titanium Mobileスレッド【Androidも】 GARMIN社のGPSのプログラム AIはやっぱり役に立たないんじゃね?コロナウイルス  逆アセンブラ、解析 	 Regular Expression(正規表現) Part15 	 Pythonのお勉強 Part73  オブジェクト指向を教えてくれ!★2  【言語仕様】重要語左端説  小学生だけど文句ある? プロキシアプリ作るおwww  関数型言語ML (SML, OCaml, etc.), Part 8  新言語を開発したい Google NaCl プログラミング 2mol ニートの俺がプログラミング言語を作るんだけど 	 エクセル指向プログラミング  初心者僕氏、ツールを自作したい  初心者だけどプログラムを勉強していろいろ作りたい 最強のプログラミング言語とは  Linuxって何?  
  
    
  
 
 20:30:19 up 8 days, 10:52,  0 users,  load average: 189.07, 160.32, 143.42
in 1.3904149532318 sec
@[email protected]  on 103109