1 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 08:42:15.37 ID:KskL7bEXd.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part70 https://mevius.5ch.net/test/read.cgi/tech/1616072923/ Excel VBA 質問スレ Part71 https://mevius.5ch.net/test/read.cgi/tech/1621914481/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
855 名前:デフォルトの名無しさん [2021/09/02(木) 18:40:44.69 ID:95p8ZRX9M.net] >>849 日付の列だけあればいいよな 見た目は書式でどうとでもなるし
856 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 19:39:27.31 ID:vUCj94gS0.net] >>849 ここは日本やぞ
857 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 20:22:46.11 ID:JA6Fm57Z0.net] 散布図において、点と点を結ぶ直線の色を、その系列の系列名参照先セルの背景色と同じ色に一括で変えるコードを教えてください。 背景色が設定されてない場合は色は変更しなくて良いです。 例えば下記画像のデータと散布図があるとします。 B1:E1セルの背景色を赤色に塗って、F1:G1セルの背景色を青色に塗ってマクロを実行すると、散布図の直線のうち、#1から#4が赤色に変わり、#5、#6が青色に変わり、#7以降はそのままの色を維持するようにしたいです。 https://i.imgur.com/lLWaKl2.jpg https://i.imgur.com/Pdf7drp.jpg 系列が莫大な数のグラフだと設定から一つずつ色を変えるのは大変なので自動化したいです。 よろしくお願いします。
858 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:07:03.00 ID:pxeaKQvs0.net] 質問スレなのにコード全てを教えてもらおうとするのはいかがなものかね ある程度自分コード書いてここが分からないとかならわかるが
859 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:24:04.85 ID:DFz3pANA0.net] でも>>1 で作成依頼もOKって書いてるしなあ
860 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:26:06.23 ID:LsFuz3WEH.net] >>853 ほい ワークシートの中にグラフが1つしかないこと、全データがグラフに使われていることが条件 Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate For k = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 1 c = Cells(1, k + 1).Interior.Color If c <> &HFFFFFF Then ActiveChart.FullSeriesCollection(k).Format.Line.ForeColor.RGB = _ RGB(c Mod 256, Int(c / 256) Mod 256, Int(c / 65536)) Next End Sub
861 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:38:11.49 ID:pxeaKQvs0.net] >>855 それはすまない
862 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 23:50:56.62 ID:JA6Fm57Z0.net] >>856 ありがとうございます。 頂いたコードをちょっと改造したら出来そうです。
863 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 00:34:19.18 ID:7VSa3gcD0.net] FullSeriesCollectionってなんだよ 動かねーw
864 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 04:25:34.03 ID:kuvugUtS0.net] >>858 >>859 おめー、すごい本音と建前だな そのギャップ、埋める必要はない 吐露したいときはあるからな
865 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 06:02:06.71 ID:1mYCibIj0.net] >>844 試してみたら、なんとかなりそうです! 何度もご助言いただき ありがとうございます
866 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 07:17:18.60 ID:staQfXFI0.net] >859 検索した方が早いぞ 俺も知らないけど検索したら内容は秒で理解できた https://docs.microsoft.com/ja-jp/office/vba/api/excel.fullseriescollection
867 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 13:32:27.55 ID:LfmEXbOQ0.net] Bookを別名保存して配布用データを作成する場合に、.xlsx にしてそのファイルにVBAコードは存在しない状態にする方法はあるのでしょうか?
868 名前:698 mailto:sage [2021/09/03(金) 14:03:11.01 ID:XbDGKeUz0.net] >>816 >>824 どちらも求めている結果になりました 824は自分でも試してもエラーになっていたので助かりました 型変換でこんなにつまづくは思わなかった(未だに原理は理解出来ていない…) ありがとうございました!
869 名前:デフォルトの名無しさん [2021/09/03(金) 15:55:21.72 ID:yaNRzQx30.net] >>863 全角文字の拡張子だからテキストファイルか何かにするのか?それとも単なる馬鹿か?
870 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:59:38.52 ID:FrRqokaz0.net] >>865 寂しいの?
871 名前:デフォルトの名無しさん [2021/09/03(金) 16:58:35.16 ID:w5919iNp0.net] フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】 https://dev-memo.net/fleelance_1000/ 【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由 https://off.tokyo/blog/shinsotu-engineer-free-lancer/ フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説 https://flytech.work/blog/8142/ フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは? https://shikin-pro.com/guide/18633 【コラム】フリーランスは本当に自由なのだろうか? https://zenn.dev/cat2pgm/articles/42bb40bf121342 「月100万円」稼ぐ猛者も、副業を始めるIT人材が急増している真の理由 https://xtech.nikkei.com/atcl/nxt/column/18/01572/021900001/ フリーランスエンジニアになって月100万稼いだ話 https://comblog.net/2020/07/06/freelance-100/ 素人からでも「まずは月収50万以上」を目指したい方向け【フリーエンジニア・コンサル】 https://aruto.org/freelance-consulting フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説 uma66.hateblo.jp/entry/2019/04/07/153119
872 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 00:30:43.37 ID:HdS4X7vy0.net] >>862 自宅で使ってるExcelが2010がFullSeriesCollectionをサポートしてないというオチを wで表現してみたんだが 伝わらなかったようでスマン
873 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:46:52.30 ID:bCHQ7Kl80.net] そこそこできるんだけど、これ中学生辺り相手に家庭教師したらいい小遣い稼ぎになるんでね
874 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:51:02.10 ID:4OUEmuPid.net] 家庭教師なんて大学生の仕事だぞ オヤジは採用されない
875 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 20:55:48.09 ID:NYbUbMGR0.net] ハイパーリンクを絶対参照で設定しているのだけど(ファイル移動に備えて)表示文字列がフルパスだと 表示しきれないのでここだけ相対参照で表示したい. 絶対参照から相対参照文字列を取得する関数はないでしょうか?
876 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 22:01:27.65 ID:6VddzRoR0.net] 。。。ラムダ関数の件どうなったの?
877 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 01:09:39.85 ID:fgpBZKKDa.net] >>871 Perlで自作
878 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:00:10.71 ID:wW3S0zCbM.net] >>871 split
879 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:23:08.20 ID:LRYELwZL0.net] >>874 ヒントありがとう. 1,リンク元とリンク先のフィアル名以外のフルパスを区切り文字¥で分割する. 2,共通部分を除いたリンク元の文字列数の個数だけ”.\”を共通部分を除いたリンク先の文字列&ファイル名 で
880 名前:っていますか? 2の部分で個数を数える処理とかをスマートのやる方法ありますか?思いつくのが文字列を一つずつ比較して 異なると抜けるみたいみたいな処理がしか思いつかないんで. [] [ここ壊れてます]
881 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:23:56.54 ID:p7djLIgl0.net] >>871 相対参照でも表示しきれないものはどうする気だ?
882 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:24:49.55 ID:LRYELwZL0.net] 間違えた 1,リンク元とリンク先のフルパスを区切り文字¥で分割する. 2,共通部分を除いたリンク先の文字列&ファイル名に共通部分を除いたリンク元の文字列数の個数-1だけ”.\”をつける
883 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:25:31.04 ID:LRYELwZL0.net] >>876 そこまで深くないんで.
884 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:31:48.41 ID:p7djLIgl0.net] 相対参照への変換は動作が変わるので 表示だけ工夫することを勧めるよ
885 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:43:18.05 ID:LRYELwZL0.net] >>879 > 相対参照への変換は動作が変わるので →アドレスそのものは絶対参照のままにするので動作はかわらないと思います.
886 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 11:37:34.66 ID:p7djLIgl0.net] >>880 以下どれかじゃ駄目なん? (a)Tooltipでちゃんと表示して通常は切れたまま (b)2行に分けて表示 (c)パスの先頭から何文字か + ” 〜(省略)〜 ” + ファイル名
887 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 13:38:20.09 ID:7P2mUzTw0.net] それ、どこからの相対パスが欲しいんだよ? 自分自身から自分自身への相対パスなら、全部.\だから たんにファイル名だけ表示させればいいんじゃね 汎用的に真面目な相対パスに変換しようと思ったら結構邪魔くさいな まあこういうのは大概すでに誰かがやってる VB.NETだが https://dobon.net/vb/dotnet/file/getabsolutepath.html#pathrelativepathto とか。API呼び出しでやる方法もそこにある
888 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 15:24:56.80 ID:LRYELwZL0.net] >>881 表示だけでは絶対パスがわからないのでTooltipは必要ですよね。 表示をファイル名だけにするか、C のようにするかですけど、表示だけである程度場所が分かりそうな情報が表示されていると便利なので、相対パスもしくはそのファイルがあるフォルダー名のどちらかにします。フォルダーは存在位置をだいたい覚えてるもんですから。
889 名前:デフォルトの名無しさん [2021/09/08(水) 14:22:30.46 ID:pb/a0YKS0.net] D列〜H列の各4項目を印刷エリアのA列に配置して それぞれ印刷がしたいのですが、下記でも出力されますが、 もっと簡略な書き方あったら教えてください。 Sub PrintOut() Range("A1").Value = Range("D1").Value Range("A2").Value = Range("D2").Value Range("A3").Value = Range("D3").Value Range("A4").Value = Range("D4").Value ActiveWindow.SelectedSheets.PrintOut Range("A1").Value = Range("E1").Value Range("A2").Value = Range("E2").Value Range("A3").Value = Range("E3").Value Range("A4").Value = Range("E4").Value ActiveWindow.SelectedSheets.PrintOut (以下F列分〜H列分まで繰り返している) End Sub
890 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 15:21:04.14 ID:75/i6xmb0.net] >>884 offset 関数を使って I と J のループで回せば?
891 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 15:22:28.05 ID:XlNVU0UMH.net] >>884 Sub PrintOut() Dim a For c = 4 To 8 a = Cells(1, c).Resize(4, 1) Range("A1:A4") = a ActiveWindow.SelectedSheets.PrintOut Next End Sub
892 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 16:25:02.09 ID:XlNVU0UMH.net] 処理する範囲をわかりやすくしてみた Sub PrintOut() Dim a For Each c In Range("D1:H1") 'DからHまで a = c.Resize(4, 1) '縦4行 Range("A1").Resize(4, 1) = a ActiveWindow.SelectedSheets.PrintOut Next End Sub
893 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 16:25:12.58 ID:W4cHTvUwd.net] すげー!凄い短くなってる! ありがとうございます。 後で試してみます。 まだVBA初めて間もないのですが、しっかり勉行すれば、 繰り返し作業簡素化の可能性を非常に感じました。 ありがとうございました。
894 名前:デフォルトの名無しさん [2021/09/08(水) 16:48:49.57 ID:q+ZxDcv00.net] またいつものあいつに引っ掛かる馬鹿ども
895 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 17:49:01.52 ID:I0eTwbNOM.net] って言いたいだけの自尊心の擬人化さん
896 名前:デフォルトの名無しさん [2021/09/08(水) 18:05:21.93 ID:ehctv71ga.net] ねぇねぇワクチンが足りないとか余って捨ててるとかなんなの? Excelでさえ1億2千万人のデータぐらい余裕で作れるんじゃないの?
897 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 18:33:49.98 ID:lGj0x8DT0.net] with派は?
898 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 18:39:36.93 ID:wkgfp7fUa.net] Excelの印象派はちょっと困るねぇ セル結合じゃなくてシェイプでやってよ
899 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 19:58:14.37 ID:y8J9pOw20.net] Excelではどうにも出来ないたぐいのヒューマンエラーが多いからな
900 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:38:25.14 ID:foh10V2pM.net] たとえば5000行もある住所録(一人一行使う)で、左端(つまりA列)にチェックボックスをつけるって出来ます? 5000個もチェックボックスオブジェクトを作るって現実にやってる方います?これは現実的でしょうか? 今考えてるのはA列に正方形(□)とレ点付きの□の二択プルダウンを用意することなんだけど、 それだとマウスのダブルクリックで表示を切り替えることは出来なくなる。 良い方法ありますか?
901 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:59:04.73 ID:4tB32NIbH.net] >>895 チェックボックスを5000個作るぐらい簡単だが? けど、そういう一覧表を作る意味がないだろ 5000件も手作業でチェックなんか入れてたら絶対にミスが起きるし 次の作業のことまで考えて表を作れよ
902 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:11:27.57 ID:zJmTPnJXM.net] >>895 チェックボックスみたいなテキストでやる
903 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:12:10.09 ID:FIynLA9Dd.net] >>896 自分も同じことを思ったけど解決策にならないレスはせずに放置がいいと思う 理解していけばしていくほどやれることを絞って考えていくようになるかと
904 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:25:59.17 ID:4jr1qQtOd.net] 参考 チェックボックスの絵文字 使用は推奨しない ☑ ✅
905 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:27:08.70 ID:2Kg/wmz7M.net] >>895 ダブルクリックかライトクリックイベントで背景色変えるとかなんか印を付けるとかした方が楽そう
906 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:32:22.27 ID:IpCo+OYQ0.net] >>895 普通にその方法でいいじゃんと思うけど、ダブルクリック必須なの? チェックボックスの操作ならせめてシングルクリックだと思うけど。 マウス必須ならA列にハイパーリンクを仕込んでおいて、イベント ハンドラの中でどこが押されたかを判断して状態を反転させるという 方法もある。 ただこの場合A列は自由に入力可能なのでシートの保護を掛けることに なると思うし、どの部分をどこまで編集可能とするかということとの 兼ね合いになると思う。
907 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:42:39.73 ID:9k5sY4oP0.net] >>895 あなたの言ってることはダブルクリックとかチェックボックスとプルダウンとか意味不明なんだけど、やりたいことさえはっきりしてなら VBA でオブジェクトの追加コマンドを追加場所を1行から5000行まで変えながら回せばいい。
908 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:48:23.02 ID:4tB32NIbH.net] >>902 セルをコピペすればセルに乗ってるオブジェクトも一緒にコピペされる だからチェックボックスを5000個に増やすだけなら数クリックの手間だけで終わる ブックが重くなるけどな
909 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:50:53.75 ID:foh10V2pM.net] シングルクリックと間違えてました。 自動的に5000個作ると30分待っても終わらないので、ダメなのだと思ってました
910 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:53:21.37 ID:foh10V2pM.net] >>897 >>896 チェックを入れた行だけ特定の書式にしてファイルとして出力する用途なので、そこは気にしないのです
911 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:01:26.77 ID:4tB32NIbH.net] 試しにやってみたけど、チェックボックス5000個コピペだけなら20秒ぐらいで終わったぞ https://i.imgur.com/4Bo9Yvp.png
912 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:03:58.28 ID:foh10V2pM.net] >>906 1000個なら一分待てば出来ました。 しかしその後の操作がめちゃくちゃ重くなるのでこうした使い方は一般的ではないのかな、という疑問がありました
913 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:07:12.46 ID:foh10V2pM.net] >>897 おさわがせしました。 1000個作って、特定行を一行削除するだけでもとても完了に時間がかかるので、 この方の方法でしのぎます
914 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:21:19.40 ID:37zPgm1s0.net] >>907 ちなみにどんなふうに削除してる?
915 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 14:10:09.39 ID:m7/bNtYYa.net] クラスモジュールの引数に可変長引数を渡したくて、呼び出し側でその引数に変数をぶち込んで渡したいんだけど、これってやっぱりできないの?
916 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:38:24.58 ID:7gPjCFSp0.net] >>895 sheetモジュールに記述 ※ただ、選択済みのセルをクリックしてon/offができない Private Sub Worksheet_SelectionChange(ByVal Target As Range) d = WorksheetFunction.Unicode(Cells(1, 1).Value) Debug.Print (d) ' 38960 If Target.Column = 1 Then Target.NumberFormatLocal = WorksheetFunction.Unichar(10004) & ";□;0;@" If Target.Value = 0 Then Target.Value = -1 Target.Value = Target.Value * -1 End If End Sub
917 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:39:38.73 ID:7gPjCFSp0.net] デバッグ残ってたわ。こっちで Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'A列のみ If Target.Column = 1 Then '書式設定を設定 Target.NumberFormatLocal = WorksheetFunction.Unichar(10004) & ";□;0;@" '-1かけて反転させる If Target.Value = 0 Then Target.Value = -1 Target.Value = Target.Value * -1 End If End Sub
918 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:55:23.82 ID:zfiF925t0.net] 関連スレ建てたよ VBAなんでも質問スレ Part3 https://mevius.5ch.net/test/read.cgi/tech/1631184381/
919 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 23:48:42.23 ID:ULMewu8MM.net] >>910 delimiterで値を連結して一つの文字列にして渡し それを受け取った側で処理するとかw
920 名前:910 mailto:sage [2021/09/10(金) 00:39:56.77 ID:Ovs2Qwn/0.net] >>914 なるほど 無理やりすぎて草
921 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 00:57:16.66 ID:cGWG4Dd90.net] >>910 ちょっとなに言ってるかわかんないけど ParamArray とかそういうこと?
922 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 01:37:01.01 ID:k/ICsAd30.net] >>910 恰好つけて内容端折ったり、初心者に有りがちなオレオレ用語使ってるせいで意味不明 ちゃんと質問したら回答や代案出してくれる人いると思うよ
923 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 06:29:18.76 ID:SjJWgB1Wd.net] エスパーしてみるとオーバーロードしたいってこと?
924 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 07:09:26.44 ID:LHgBQKs+0.net] >>910 てParamArrayでいいじゃん(いいじゃん)
925 名前:910 mailto:sage [2021/09/10(金) 12:04:43.32 ID:9zsJDEjAa.net] 言葉足らずで申し訳ない ・クラスモジュールでtestSubを作る ・testSubには引数として複数の文字列(パス)を入れたいが、場合によってはいれる数が変わるので可変長引数として渡したい→paramArrayを使った ・標準モジュールでtestSubを呼び出すときに引数に文字列直打ちで入力→これは呼び出せた 例 class.testSub(“a”, “b”, ”c”) →OK ・一方で引数に参照渡し?で変数を入れることができなかった 例 Dim a as string:a = “a” Dim b as string:a = “b” Dim c as string:a = “c” class.testSub(a, b, c) →エラー まとめ:参照渡し+可変長引数を実現する方法はありますか?という質問です
926 名前:デフォルトの名無しさん [2021/09/10(金) 12:33:58.83 ID:LPBZaVhNM.net] へー、どんなエラーメッセージが出るんだい?
927 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:41:02.44 ID:s5UDpNf0d.net] bとcに代入されてないように見えるんだけど…
928 名前:910 mailto:sage [2021/09/10(金) 12:44:45.11 ID:9zsJDEjAa.net] >>922 誤字りました >例 >Dim a as string:a = “a” >Dim b as string:b = “b” >Dim c as string:c = “c” > >class.testSub(a, b, c) →エラー
929 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:44:47.75 ID:Wgizc1rOd.net] paramarrayは使ったことないからなんでエラーになるか知らないけど optional byrefをいっぱい作れば解決か?
930 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:57:26.48 ID:3anmc9lr0.net] うちではエラーにならないので、ParamArray以外のところで何か起きていると思う
931 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 13:42:46.46 ID:cGWG4Dd90.net] とりあえずエラーメッセージぐらい書け Call class.testSub(a, b, c) とかいうオチじゃないだろうな
932 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 13:48:25.18 ID:cGWG4Dd90.net] あと言っとくけど、参照型と参照渡しはちがうからな その例でいくなら(受け取り側で何やりたいかによるが)参照渡しである必要性なんてないんじゃね
933 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:05:47.68 ID:bX+CqFZ4r.net] vbaの配列って絶対要素数がわかってないとだめなの? 他の言語のリストみたいにあとから追加とか削除したいんだけど
934 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:09:49.67 ID:kF1ZwEU6a.net] >>928 一々ReDimしなきゃならん それは嫌って人のためにCollectionがある
935 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:16:50.98 ID:tlapevkG0.net] 二次元配列以外はコレクションでいいよな
936 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:22:02.18 ID:kF1ZwEU6a.net] Dictionaryも好きだけどね 用途によるね
937 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:47:18.98 ID:bX+CqFZ4r.net] >>929 まじかよ メモリ確保の問題かな? これは大きな弱点やな
938 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:10:25.64 ID:bX+CqFZ4r.net] 配列が可変だったら終わる作業が全く終わらん マジでいらつくわ
939 名前:デフォルトの名無しさん [2021/09/10(金) 16:26:30.74 ID:rHUFiRNt0.net] >>886>>887 コンパイルエラー 変数が定義されていません とか出たのですが・・・。 c のトコがハイライトされています。
940 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:31:21.74 ID:8Iwa8KgHa.net] >>934 変数が定義されてないなら定義すればいい
941 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:31:29.22 ID:2Fxd4w670.net] Set range = ActiveSheet.Range("J10") debug.print range.Cells(0, 0).address この出力がI9になります J10を期待したのですがどういう事ですか?
942 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:36:53.08 ID:8Iwa8KgHa.net] >>936 ActiveSheet.Cells(1,1).AddressはA1になるでしょ? んで、ActiveSheet.Cells(0,0).Addressはオブジェクト定義エラーになるでしょ つまり、ワークシートの起点はA1であり、Cells(1,1)なわけ だから、それから今回の事象は推察できるでしょ 余談だけどその変数名は絶対にやめた方がいい VBAには既にRangeって単語があるんだから
943 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:41:57.41 ID:8Iwa8KgHa.net] >>936 追記 あなたの考えどおりに動く、offsetって関数があるからそっち使ったらいいんじゃないかな
944 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:42:03.28 ID:tlapevkG0.net] >>936 1,1にすればなるだろ 0だから行列がそれぞれマイナス1されてるんじゃね? 0入れたことないから予想だけど
945 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:52:02.92 ID:2Fxd4w670.net] >>937-938 Cellsの引数はそのまま1つ目2つ目と考える事にします 変数名は質問用に適当にしましたすみません offsetが距離1つ先2つ先なのでこちらを使用しようと思います ありがとうございました >>939 1,1にすればなりますが論点はそこではありません
946 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:54:59.11 ID:tlapevkG0.net] 0から始まる配列なんかを入れたいという感じか
947 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:05:41.13 ID:cGWG4Dd90.net] >>934 変数が全角と半角混在してんじゃね つかコードそのまま張れよ
948 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:13:14.83 ID:8Iwa8KgHa.net] >>942 cの宣言してないだけ
949 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:47:04.78 ID:k/ICsAd30.net] >>920 下に書いたようにParamArrayを使ったメソッドが定義されたクラスモジュールを作って、 それに宣言した変数を渡してみたけどエラーは起きないよ。 後、「参照渡し」で有る事を気にしてるけど、ParamArrayが指定された引数は参照渡しになる。 例えばtestSub内でargs(0)に適当な値を割り当てると、呼び出し元のcaller関数のaの値も変わる。 クラスモジュール(class.cls) Public Sub testSub(ParamArray args()) Dim arg For Each arg In args If VarType(arg) = vbString Then Debug.Print arg; Next End Sub 標準モジュール Sub caller() Dim a As String: a = "a" Dim b As String: b = "b" Dim c As String: c = "c" Dim Class As New Class Class.testSub a, b, c 'イミディエイトウインドウ: abc End Sub だからこっちが質問内容を取り違えてるんだと思うんだけど、どこが違う? それとエラーメッセージを教えて欲しい もし意味が分かるならコンパイルエラーか実行時エラーかも知りたい
950 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 18:37:19.42 ID:k/ICsAd30.net] >>934 Columnsで列ごとに取り出す方法で短く、分かりやすくしてみた Sub PrintOut() Dim Column As Range For Each Column In Range("D1:H4").Columns '指定範囲を一列ごと取り出す Range("A1:A4").Value = Column.Value '取り出した一列の値をA1:A4に張り付ける ActiveWindow.SelectedSheets.PrintOut Next End Sub ちなみにこういうのはActive***とセル番号指定じゃなくて、 シートモジュールとテーブル使った方がメンテしやすくなる。 A1:A4とD1:H4にそれぞれテーブルを作成(セルを選択して「ホーム」リボンの「テーブルとして書式設定」)し、 A1:A4のテーブル名を「コピー先」、D1:H4のテーブル名を「コピー元一覧」にする。 そのシートのシートモジュールに次の様なメソッドを定義する Sub MyPrintOut() Dim Column As ListColumn For Each Column In ListObjects("コピー元一覧").ListColumns ListObjects("コピー先").Value = Column.DataBodyRange.Value ActiveWindow.SelectedSheets.PrintOut Next End Sub やってることは一緒だけど、 ・コピペする(される)セルの番地が変わっても動く ・D1:H4の範囲が増えてもテーブルを範囲を変更するだけで動く ・「コピー元一覧」から「コピー先」に張り付けてるのがソースを見ただけで分かる とメリットだらけ
951 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:16:37.69 ID:cbJJzriEM.net] >>937 > 余談だけどその変数名は絶対にやめた方がいい > VBAには既にRangeって単語があるんだから なぜ? VBAは型の名前空間と変数等の名前空間違うから問題なく動くぞ
952 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:38:37.34 ID:2Fxd4w670.net] >>946 そういう問題じゃないんですよ
953 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:40:05.19 ID:TT1mfVcaM.net] >>947 だからどういう問題かを書けないなら黙ってなよ
954 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:43:02.76 ID:2Fxd4w670.net] >>948 動くかどうかという話ではないので論点はそこではありません
955 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:07:47.67 ID:rk4qX9ha0.net] 動かすだけならグローバルに配列つくればいいわな