1 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 07:07:35.59 ID:tS4zKdphH.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part76 https://mevius.5ch.net/test/read.cgi/tech/1651339421/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
730 名前:デフォルトの名無しさん [2022/09/25(日) 05:30:19.65 ID:/q7OsFL50.net] 一般ユーザがある列のセルを編集できないようにしたい。 でも、VBAの実行や、セル関数の結果は反映させたい。 https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%82%BB%E3%83%AB%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B-b942fe92-5e87-0985-214b-9617b5b6d53f ↑セルのロック という機能で試してみたがVBAマクロでの変更は許されなくてちょっと困っています。 セルに対してマウスイベントを発生させない。みたいなことを考えて、調べているが。 皆さんも悩まれる案件かと思います。もっと良い方法ないでしょうか?
731 名前:デフォルトの名無しさん [2022/09/25(日) 06:18:07.93 ID:jaItMug30.net] VBAん中でロック解除して 処理終了間際にロックし直しってんじゃだめなの?
732 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 07:44:30.90 ID:dPa0+M2C0.net] SheetSelectionイベントとIntersect使うだけでは
733 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 09:13:59.54 ID:nIE2ah490.net] お願いします。 検索をシートからではなくブックからをデフォルトにしたいです。 下記のサイトのコードを使い検索は出来るのですが、 結果表示ではなく( '<全てのシートの検索が終わったら、結果を表示します。> )、 検索値まで移動するにはどのようにコードを書けばいいか、ご教授願います。。 https://www.moug.net/tech/exvba/0040005.html
734 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 10:44:33.52 ID:mk9vdghN0.net] >>730 worksheet_boforedoubleclick みたいなイベントプロシージャでできる
735 名前:デフォルトの名無しさん mailto:sage [2022/09/25(日) 10:58:13.51 ID:/q7OsFL50.net] ありがとうございました。 >>731 の方法で簡単にできました。 VBA実行時に保護を解除して、終了時に再度保護をかけることで、 すんなりといけました。
736 名前:デフォルトの名無しさん [2022/09/28(水) 13:31:05.50 ID:/kKDTdjO0.net] A1:10もしくはA100に入力された値を配列に格納しています。 動的配列です。 Select Case 文字列A case A1:A100のどれかに一致するなら case B1:B100のどれかに一致するなら みたいな書き方って出来ないのでしょうか?
737 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 13:35:10.17 ID:Rj0JQSes0.net] ifで条件書けよ
738 名前:デフォルトの名無しさん [2022/09/28(水) 15:15:27.03 ID:n6LgYqsE0.net] >>736 恐らく出来ない。 ただ、Select Case の後の文字列の部分をTrueとして、 A10:A100の中に該当文字列が有った場合、 Trueを返す関数を作成して、Case文の後ろに記載して その条件に当たったかを判別して、Case文の下に その条件下での処理を記載することは可能。 Caseにある条件のA10:A100にとある文字列が 有った場合とB10:B100にとある文字列が 有った場合と下に続く処理が同じなら、 先程言った関数の引数に対象範囲と検索対象文字列を 持たせておけばCase文を使う必要すら無い。 戻り値がTrueかFalseかをIf文で判断すれば良い。 その辺は実際の状況に合わせて上手く作ってくれ。
739 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 16:15:51.79 ID:vR69ytL90.net] select caseにtrue?? 知らなかったわ何それ??
740 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 18:26:27.19 ID:Pxqx/4k10.net] Do With End With Loop よりも With Do Loop End With の方が計算が早い(PCにとっては楽)と考えてよいでしょうか
741 名前:デフォルトの名無しさん [2022/09/28(水) 19:01:46.26 ID:8l5UWazH0.net] >>736 こんな感じ? https://i.imgur.com/wuSExDf.png
742 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 19:28:29.47 ID:Aad51sjLa.net] >>736 Private Function F(R As RangeRange, S As String) As Boolean Dim C As Range For Each C In R If C.Value = S Then F = True Exit Function End If Next F = False End Function ... Select Case True Case F(Range("A1:100"), 文字列A) ... Case F(Range("B1:100"), 文字列A) ... Case ... End Select
743 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 19:32:38.30 ID:Aad51sjLa.net] >>740 たいていのプログラムだと有意な差はでないから気にせずに作りやすい方で作れ 有意な差がでそうならまず測定
744 名前:デフォルトの名無しさん [2022/09/28(水) 19:38:38.93 ID:n6LgYqsE0.net] >>740 これも恐らくの話で申し訳ないけど、 元々Withで設定されているインスタンスが既に生成されているものであれば、その格納アドレス先を読むだけなので Withがループの外にあっても中にあっても処理コストは変わらないと思う。 変わったとしても繰り返し実行での誤差と見分けが付かない程度と思われる。 逆にインスタンスが生成されておらず、With New 〜 のようにWithでインスタンスを生成する場合は ヒープエリアのメモリにそのインスタンスを展開するため、Withがループの外に有った方が処理コストは低くて済む。 ・・・はず。
745 名前:デフォルトの名無しさん [2022/09/28(水) 19:40:24.19 ID:2tCqxjcra.net] とりっきー
746 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 19:51:29.67 ID:30UfjVhGd.net] >>739 ケツの穴をガバガバにして全通しするいやらしい関数だよ Select Case True Case オナラ よし通れ Case うんこ よし通れ End Select
747 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 21:06:15.14 ID:Apn5XmOg0.net] >>742 結局If文でラップしてるだけじゃん
748 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 21:06:47.83 ID:vR69ytL90.net] >>746 汚ねえな。。 こっちは夕食のカレー食ってんだぞ。。
749 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 21:20:17.00 ID:0sCmeNkX0.net] >>747 If 文でラップとか意味わからんこと言われてもw
750 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 00:27:52.00 ID:tkXe+LzA0.net] ヘイヘイヘイ~! もしも~オブジェクト変数でぇ~宣言したぁ~値がぁ🎵 ラップ調
751 名前:デフォルトの名無しさん [2022/09/29(木) 01:53:20.13 ID:I3DbECBa0.net] ラップのセンスはいまいちだね
752 名前:736 mailto:sage [2022/09/30(金) 17:41:05.63 ID:8DTKPQSA0.net] >>738-742 ありがとうございました。 変数Strの中の値が配列Listのどれかと一致するかということだったので、そのCountIFがまさにその通りでした。 それようの関数書いてSelect case True使わせていただきます。
753 名前:デフォルトの名無しさん [2022/09/30(金) 21:34:23.42 ID:RGIc4eHD0.net] >>752 Select Case True の話持ち出しといてなんだけど 最初のCase の条件に引っ掛かってその下の処理を実行した後でも 次のCaseの条件に引っかかったらその下の処理も実行するからそれだけは気をつけてね
754 名前:デフォルトの名無しさん (スッップ Sd32-r4yT) mailto:sage [[ここ壊れてます] .net] >>753 そんなことないのでは?と思って試したけどやっぱりそんなことなかったんだが 普通はcaseの条件の中に入ったら次のステップはEnd Selectにいかないか? Dim ncount As Long ncount = 0 Select Case True Case 0 = 0 ncount = ncount + 1 Case 1 = 1 ncount = ncount + 1 Case 2 = 2 ncount = ncount + 1 End Select Debug.Print ncount これは1になるんだが
755 名前:デフォルトの名無しさん (ワッチョイ 927c-cqZP) mailto:sage [[ここ壊れてます] .net] >>754 多分breakいれなきゃいけないCとかと勘違いしてるんだと思う
756 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 22:50:53.72 ID:oHn8O8ll0.net] Select みたいな文で複数の選択肢が条件満たした場合に複数の選択肢を実行する言語って PowerShell ぐらいしか知らんけど他にもあるんだろうか?
757 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 23:04:52.77 ID:FO5tGPcx0.net] >>756 cとかそうだったはずだし、たぶん複数実行するほうが多数派なんじゃね c#も、文法上は複数実行することになってるけど、break書いて抜けないと怒られるという よくわからんことになってるし
758 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 23:17:37.16 ID:2no5G0l30.net] CもそうだしJavaもそうだしPythonもそうだしJavaScriptもそう
759 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 23:34:30.49 ID:oHn8O8ll0.net] >>757-758 C/C++ はそもそも複数選択肢が条件満たすことはないよ(たいていの処理系でコンパイルエラーになる) fall through と勘違いしてるでしょ
760 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 23:56:30.92 ID:2no5G0l30.net] >>759 ああそうだ。勘違いです 申し訳ない
761 名前:デフォルトの名無しさん [2022/10/01(土) 00:36:40.48 ID:fyOJn4KOa.net] >>754 これってコンパイル時に畳み込みで定数化されて同一のラベルが複数あってエラーになるとかしないのか
762 名前:デフォルトの名無しさん [2022/10/01(土) 01:42:48.83 ID:a0drtoBbd.net] >>761 馬鹿にはそう思えるのだろ
763 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 01:48:20.03 ID:AX86MJ2c0.net] >>759 ああ、まさにfall throughだった つかそうなると、fall throughじゃなくて 複数一致したら複数ブロック実行するような言語って知らないな PowerShellってそうなのか?
764 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 01:53:07.95 ID:AX86MJ2c0.net] >>761 VBAのCaseは定数以外にいろいろ書けるから
765 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 04:50:29.38 ID:igg+s+OR0.net] >>763 複数一致 同じ条件を複数回追加すれば、それらすべてがトリガーされます。 https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-switch?view=powershell-7.2
766 名前:デフォルトの名無しさん [2022/10/01(土) 07:29:29.38 ID:66c8QTBM0.net] みんないろんな言語やってるのね
767 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 07:40:45.91 ID:BiebxrBw0.net] 他言語やってる人が暇潰しに見に来る場所って印象があるよね 質問も簡単だし答えるほうに余裕があるので他スレと比べると寛容というかギスギスしてない
768 名前:デフォルトの名無しさん [2022/10/01(土) 13:08:15.88 ID:sQwPc1U3d.net] Excelでデータベースを作り、各レコード?事に 〜月〜日 〜 〜月〜日 〜 みたいなログを表示したいのですがどの様にすればできるのか教えていただけませんか?
769 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 13:10:34.86 ID:PSWCeSJW0.net] キーボードで打ち込め
770 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 13:17:44.94 ID:GEkLNCKa0.net] >>768 入門書買って自分で勉強したらどうかな あ、EXCELが入っているPCを持ってないと無理かも
771 名前:デフォルトの名無しさん [2022/10/01(土) 13:31:32.89 ID:sQwPc1U3d.net] テキストボックスにセルの値を参照するとか、繰り返しの処理とかlookup関数とかindexとmatch関数はわかります あとはこのリストが欲しいです
772 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 13:34:23.97 ID:mp76wcbAa.net] MSのサイトを見ればいいだけじゃね?
773 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 14:11:06.32 ID:m6/aGG23M.net] >>771 漠然としすぎていて適切に回答できない 書式設定のこと?ファイル出力? どこにそれを表示したいの?
774 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 14:50:47.98 ID:ozHkf13K0.net] もう自分で勉強してくれって。
775 名前:デフォルトの名無しさん [2022/10/01(土) 15:38:51.00 ID:66c8QTBM0.net] >>768 そもそもそのログの日付とやらはどこから持ってくるつもりなのか
776 名前:デフォルトの名無しさん [2022/10/01(土) 15:39:00.83 ID:05rfSfda0.net] >>773 すみません VBAのユーザーフォームで検索用のテキストボックスを作り、 検索結果に該当したレコード(行)を選択(抽出)?して それをテキストボックス2やリストボックスに表示したいです 〜番(ID) 名前 テキストボックス(リストボックス) 〜月〜日 何をした みたいな表示画面が作りたいです
777 名前:デフォルトの名無しさん [2022/10/01(土) 15:40:48.76 ID:05rfSfda0.net] >>775 〜番号 名前 〜 〜 〜 の様な感じで列に追加していくやり方で作ろうかなと考えています
778 名前:デフォルトの名無しさん [2022/10/01(土) 16:48:39.94 ID:vnBH5ihbM.net] >>776 まずワークシート上でlookup,index,matchで検索、表示できるものを作る。 それからフォームのテキストボックスに入れた値をワークシートの検索用のセルに書き込み、結果をフォーム上のテキストボックス、リストボックスに書き込むVBAを作る。
779 名前:デフォルトの名無しさん [2022/10/01(土) 16:50:40.38 ID:05rfSfda0.net] >>778 ありがとうございます まずはそこからですよね
780 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 16:52:55.19 ID:GEkLNCKa0.net] どこでつまずいているかを書かないで答えだけほしいとか言われてもね
781 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 16:55:41.93 ID:HuJ3UkiEd.net] >>768 こんなんVBAでもなんでもなくシステムを作りたいっていってるようなもんでしょ 金払って作ってもらえよ
782 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 17:09:04.65 ID:AX86MJ2c0.net] >>768 なぜそれをエクセルでやりたいと思ったのか 今のレベルだと一から勉強レベルだと思えるが c#かせめてVB.Net覚えたほうがいいんじゃない
783 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 18:15:10.78 ID:BiebxrBw0.net] セルの内容(日付のところは文字列型(頭にアポストロフィ)で入れてる) ID 名前 日付 イベント 1 名前1 2012年3月14日 Aをした 2 名前2 2012年3月15日 Bをした 3 名前3 2012年3月16日 Cをした 4 名前4 2012年3月17日 Dをした 5 名前5 2012年3月18日 Eをした 6 名前6 2012年3月19日 Fをした ※Sheet1のマクロ Private Sub Worksheet_SelectionChange(ByVal Target As Range) With UserForm1 y = ActiveCell.Row .TextBox1 = Cells(y, 1) .TextBox2 = Cells(y, 2) .TextBox3 = Cells(y, 3) + vbNewLine + Cells(y, 4) End With End Sub フォーム(UserForm1)を作って下記コントロールを配置 TextBox,TextBox1,TextBox2,TextBox3(Multiline=true),CommandButton1 UserForm1のマクロ Private Sub CommandButton1_Click() Sheets(1).Range("A1").AutoFilter 2, "*" & UserForm1.TextBox.Text & "*" End Sub ファイル開くイベントとかボタン作って下記マクロでフォームを表示 UserForm1.Show vbModeless 聞いた限りではこんなのしか思い浮かばない
784 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 18:31:08.84 ID:oCrNNmAI0.net] VBAのPicture.Insertでリンク貼付けさせないようにクリップボード利用でPasteで貼り付けてみたら画像が異常に重くなりすぎて使い物にならない…。 おとなしくShapes.addPicture使うしかない?
785 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 18:49:59.64 ID:PeKIyBQF0.net] >>768 Listobject作ってListrowsを都度登録する仕組みを作って目的のListrows()を呼び出すユーザーフォームを作ればいいんじゃないっすかね。
786 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 18:55:31.78 ID:HuJ3UkiEd.net] まず質問者は何ができて何ができないのか気になるが何もできないんだろうなと推測してる なのでここで丸投げしてバカなお人よしに作ってもらおうとしてるんだろ
787 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 23:20:55.43 ID:BiebxrBw0.net] 猪木が死んだ、時代が流れていく 思えばPCとの付き合いももう40年か 戦時中はと口癖のように言っていたジジイ共も消えてアマチュア無線なみにニッチな趣味だったPCが主流になるとは不思議なものだ
788 名前:デフォルトの名無しさん mailto:sage [2022/10/02(日) 07:27:45.20 ID:ySn/5a2I0.net] >>784 もとの画像が大きいんじゃね、表示用の画像を別途つくってから貼り付けてみ
789 名前:デフォルトの名無しさん [2022/10/02(日) 13:27:44.47 ID:TlawqFoR0.net] >>783 わざわざありがとうございます 助かりました
790 名前:デフォルトの名無しさん [2022/10/02(日) 15:47:28.98 ID:DdgukWIZ0.net] >>787 おいおいいつだよって思ったら昨日かよ >>786 それでいいと思うんだよな それが社会の基本だし、暇な元事務のNEETはそれで快楽を得つつ勉強になり、 転職への自信になるだろう
791 名前:デフォルトの名無しさん [2022/10/02(日) 20:54:31.26 ID:TlawqFoR0.net] VBAは作業を登録して自動化するくらいで覚えておいた方がいいですよね
792 名前:デフォルトの名無しさん mailto:sage [2022/10/03(月) 06:16:19.93 ID:S2WAje4f0.net] >>788 800kの画像でやってみたけど15Mぐらいまで巨大化してしまう やはりAddPictureで代用してみる
793 名前:デフォルトの名無しさん mailto:sage [2022/10/03(月) 07:27:24.16 ID:4wRZXMmm0.net] VBEに書いたコードの整列っていうかコードを整えるっていうか自動インデントっていうかそんなショートカットキーがあったと思うけどなんだっけ?
794 名前:デフォルトの名無しさん (ワッチョイ 53ce-OAEy) mailto:sage [[ここ壊れてます] .net] タブ
795 名前:デフォルトの名無しさん [2022/10/03(月) 20:58:11.99 ID:FDmFS1zQ0.net] >>791 変な枷付けること考えんと 好きに作っていいんやで
796 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 15:00:55.06 ID:pLalriKq0.net] イベントで質問 余所で作ったエクセルにVBAで改造加えてるんだけど 1マス入力だけするSheetにActiveXのコマンドボタン付けたら Worksheet_SelectionChange が発生しなくなった コマンドボタン押したイベントは拾ってるので EnableEventsがFalseってわけじゃない(イミディエイトで確認済み) デザインモードを解除してもWorksheet_SelectionChangeイベントが起きないので しょうが無いからまた一から作り直したんだが この現象って頻発するもの? ググってもOfficeの修復かEnableEventsしか解決策が出てこない
797 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 15:54:59.32 ID:TDYI1fTGd.net] >>792 Sub Macro1() ActiveSheet.Pictures.Insert "C:\Work\Sample1.jpg" End Sub これで400KBのpngで試してみたけど なぜかxlsmファイルのサイズは15KB 何か別の要因とか
798 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 19:28:07.31 ID:uOFwOuxi0.net] >>796 そりゃエクセルを改造したら駄目だろ
799 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 19:47:41.77 ID:o+JurUyd0.net] >>792 オプションの詳細設定-イメージのサイズと画質 ってどうなってる?
800 名前:デフォルトの名無しさん [2022/10/04(火) 21:08:36.46 ID:vyetwO+c0.net] Dim ar(2) As Variant ar(0) = 1 ar(1) = 2 ar(2) = Split("1,2,3,4,5", ",") Dim i For i = 0 To UBound(ar(2)) ar(2)(i) = CLng(ar(2)(i)) Next i splitで作ったジャグ配列の中身をlong型に変換したいです。 variant変数に一度入ったらもう無理ですか? 一応他の変数に入れる事で型変換には成功するのですが。 余計な変数を二つも用意してstringで作成されたのを一時的なvariant型ノーマル配列に おさめてmそのあとで本当に使いたい配列のジャグ配列に入れていくというのが どうも汚い感じで腑におちません。 アドバイスもらえると助かります。
801 名前:デフォルトの名無しさん [2022/10/04(火) 22:26:54.77 ID:cce3s7590.net] >>800 出来ません 諦めてください
802 名前:800 [2022/10/04(火) 22:43:48.69 ID:vyetwO+c0.net] >>801 ありがとうございます。 ジャグ配列はRedim出来ないのがデメリットですね。 動的な配列の中にジャグ配列なのですが、なんとか先に不確定な親配列の中にある 不確定な数のジャグ配列を一時的なLong型配列に作って そこからさらにsplitなしでなんとか作ろうとあれこれしてたら よっぽど>>800 の方法の方が処理がわかりやすくなってしまい徒労に終わりました。 諦めます。踏ん切りつきました。
803 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 23:35:06.72 ID:o+JurUyd0.net] >splitで作ったジャグ配列 >動的な配列の中にジャグ配列 ジャグ配列って用語の使い方が微妙に間違ってる気がするが... そもそも文字列を分割して配列作ってるんだから文字列の配列になるのが当然で Variant上等でやるなら、それを使う側がVariantで受ければいいだけでは? まあ俺ならどうしても文字列をSplitしてLongにしたいなら Longの配列返すSplitのラップ関数作るけど
804 名前:デフォルトの名無しさん [2022/10/05(水) 04:48:52.00 ID:b9GTOuH90.net] sqliteで作ったジャグ配列。
805 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 07:10:06.74 ID:8YZU4Hq7a.net] >>797 それでいくとうまくいくんだけどね、 通常のPictures.Insertだとリンク貼付けなのよ。他人に送付したら見れない。 だから一旦クリップボード経由でPaste使ってやってるんだがそれだと容量がヤバくなる。
806 名前:デフォルトの名無しさん [2022/10/05(水) 08:07:32.65 ID:hw4y4dFR0.net] そもそも何でもかんでも配列で処理しようとするのがちょっとねぇ。 例えば列に当たる要素毎に違う型を使いたいなら ちょっと仕組みは大きくなるけどADODBのRecordsetを使うことや 1行の列データ単位の値を格納するクラスを作ってそれを行単位としてディクショナリやコレクションに追加して行くことも検討することを視野に入れると 結局後で読みやすく汎用性の高いロジックが組めたりする。 処理速度優先なら配列一択だからそのときのシュチュエーションに合わせて使い分けだね。
807 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 08:19:21.40 ID:SsR8S72r0.net] 構造体ではできんの? ジャグ使う機会無いからなんとも言えんが
808 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 10:50:57.71 ID:HrKgxVhUd.net] すぐDBとか持ち出す奴いるけどコスト考えたらそう簡単にDBなんか使わんと思うけどね 普通に配列処理用の関数のみのモジュールでコード管理すればいいだけと思うわ
809 名前:デフォルトの名無しさん [2022/10/05(水) 13:20:52.03 ID:7KiNZ4t1d.net] >>808 何のコスト?
810 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 14:41:00.50 ID:bxBPBLxH0.net] やっぱ好きなように作るのが1番ね
811 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 15:47:13.70 ID:DsSYxIFi0.net] ワークシートがDBみたいなもんだしね
812 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 15:53:15.41 ID:tZ9pwx2fM.net] 学習コスト
813 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 21:19:11.66 ID:/BrWnOTx0.net] コストコ
814 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 23:35:05.88 ID:bxBPBLxH0.net] コスパ良い
815 名前:デフォルトの名無しさん [2022/10/06(木) 16:49:22.22 ID:wENRazb+d.net] 例えば、誕生石を取得するGetBirthStone関数を作ろうとすれば引数は「日付 as Variant」と「月 as Integer(Long)」のどちらがいいでしょうか?
816 名前:デフォルトの名無しさん mailto:sage [2022/10/06(木) 16:54:16.04 ID:lmEPcDvIM.net] Dateではあかんのか?
817 名前:デフォルトの名無しさん mailto:sage [2022/10/06(木) 16:55:37.45 ID:1FPDwTBGM.net] そんなもんVLOOKUPで誕生石シートを検索すれば十分 VBAを正しく使うコツはVBAを可能な限り書かないことだよ
818 名前:デフォルトの名無しさん [2022/10/06(木) 17:19:15.50 ID:wENRazb+d.net] >>816 Date型でも大丈夫ですか? 一応、最初の部分はこう書いてみました If Not IsDate(日付) then GetBirthStone = CVErr(xlErrValue) Exit Function
819 名前:デフォルトの名無しさん [2022/10/06(木) 17:48:34.71 ID:KR9VbeXw0.net] >>817 いや、むしろVBAだけの方がメンテしやすい データとロジックは分ける方がいい
820 名前:デフォルトの名無しさん mailto:sage [2022/10/06(木) 19:10:02.45 ID:YSVEcn1gd.net] >>815 元のデータが何によるかで違うけど「月 as Integer(Long)」でいいのではと思う 仮に元のデータが日付でもGetBirthStone(Month(日付))で済む 月を渡すようなケースがありえないなら日付を渡して関数内でMonthを使うでもいい
821 名前:デフォルトの名無しさん (ワッチョイ 435f-pIDl) [[ここ壊れてます] .net] 月だけでいい 特定の日付に依らずある月の誕生石を知りたい場合に 意味のないDate値用意しなきゃいけなくなるから可読性が落ちる >>817 誕生石みたいに改訂されたことがニュースになるくらい固定されてる内容ならコードにベタ打ちでいいと思う 祝日みたいに毎年変動するものとか、組合せの数が多すぎる要素ならシート管理の方が扱いやすいと思うけど
822 名前:デフォルトの名無しさん (ワッチョイ d3da-pIDl) mailto:sage [[ここ壊れてます] .net] >>815 その程度のこと自分で決められんようでは時間かかってしょうがないだろ
823 名前:デフォルトの名無しさん (ワッチョイ 6f8c-SQdC) mailto:sage [[ここ壊れてます] .net] >>815 Function getBirthStone(日付 As Date) Application.Volatile True getBirthStone = WorksheetFunction.Choose(Month(日付), "ガーネット", "アメシスト", "アクアマリン", "ダイヤモンド", "エメラルド", "ムーンストーン、真珠", "ルビー", "ペリドット", "サファイア", "オパール、トルマリン", "トパーズ", "トルコ石、タンザナイト") End Function こんなかんじ?
824 名前:デフォルトの名無しさん [2022/10/06(木) 22:32:10.00 ID:wENRazb+d.net] >>823 ありがとうございます。
825 名前:デフォルトの名無しさん mailto:sage [2022/10/06(木) 22:47:25.99 ID:HCQdlFdq0.net] >>823 わざわざワークシート関数を呼ばなくてもVBAにもChoose関数あるよ https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/choose-function
826 名前:デフォルトの名無しさん mailto:sage [2022/10/06(木) 23:06:53.10 ID:gOgPUvPm0.net] ほんとだw てへ
827 名前:800 mailto:sage [2022/10/09(日) 17:09:18.30 ID:Kilq6kjS0.net] >>803 ラップ関数作る解決方法最高です。 頭固かったです。 他にも導入できそうなところが見つかり助かりました。 感謝です。
828 名前:デフォルトの名無しさん mailto:sage [2022/10/10(月) 21:48:05.32 ID:P58+Ol8v0.net] >誕生石みたいに改訂されたことがニュースになるくらい固定されてる内容ならコードにベタ打ちでいいと思う >>823 を見ての通りこの手は表記ゆれが問題になる事が多いから 可能な限り外部データにした方がいい
829 名前:デフォルトの名無しさん mailto:sage [2022/10/11(火) 13:53:54.44 ID:uAPvvwer0.net] インプットボックスで入力される値が数字かどうか判断するコードってどう書けばいい?
830 名前:デフォルトの名無しさん mailto:sage [2022/10/11(火) 14:15:03.61 ID:fEDU7G4fd.net] ・符号(+-)を許すか ・ドット(小数点)を許すか ・カンマ(桁区切り) を踏まえて文字の妥当性チェックすればいいんじゃないの