[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/10 11:15 / Filesize : 313 KB / Number-of Response : 1008
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part72



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

845 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 14:04:46.60 ID:jQ7od4vmd.net]
>>840
今までの経緯を見た感じだと単純な要件は
・A1には月、B1には開始日、B2には終了日が設定される
・C列には設定された開始日と終了日を使って開始日〜終了日の値が列挙される
・D列には設定された月とC列の値を使って日付が列挙される ※単純に月/日の文字列でよいのか(年を考慮した日付でなくてよいのか)
まずこれだけの要件であれば
>>828で関数などを使わずにD列の設定を追加すればよい(Cells(行, 4) = CStr(Cells(1, 1))&"/"&Cells(行, 3))
初期化の検討も関数がなくなれば「とりあえずクリア」の範囲をC1:D100にでもすればよい
エラーについては関数がなくなれば今のままでも要件を満たすのでは

846 名前:デフォルトの名無しさん [2021/09/02(木) 16:20:28.02 ID:tb5mIgdu0.net]
>>840
お前、いい加減にしろや

847 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 16:37:31.01 ID:61uHr+ZW0.net]
>>829
B2に文字列が入力された時D2がどうなるかが無い

848 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 16:56:20.51 ID:61uHr+ZW0.net]
>>840
A1 月
B1 開始日
B2 終了日 (文字列の時もある)
C列 B1からB2の連番 C1は常にB1 (B2が文字列ならそれをC2へ、以降空白)
D列 月/日 D1は常に開始月/日 (C2が文字列ならそれをD2へ?、以降空白)

でいいなら

C1 = B1
C2 = IF(ISTEXT(B2), B2, IF(ISTEXT(C1), "", IF(C1 + 1 <= B$2, C1 + 1, "")))
D1 = A1 & "/" & C1
D2 = IF(ISTEXT(C2), C2, A$1 & "/" & C2)

C2とD2は下にずらっとね

849 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 17:33:27.50 ID:pGyB2U1O0.net]
>>831
自分のコードとどう組み合わせていいのかわかりませんでした
エラーになってしまい自分には無理そうです
もう少し勉強して出直したいとおもいます
本当にありがとうございます

850 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 17:40:30.06 ID:pGyB2U1O0.net]
>>841
明瞭な説明ありがとうございます
とりあえず業務上で必要なところは日付問題だけなので
それさえ解決できれば今後はなんとかなりそうです

851 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:17.19 ID:jQ7od4vmd.net]
>>846
こんな感じでいいんじゃないの?
Private Sub Worksheet_Change(ByVal Target As Range)
'B1B2以外は終了
If Intersect(Target, Range("B1:B2")) Is Nothing Then
Exit Sub
End If
'クリア
Range("C1:D100").Clear
'開始日のチェック
If CheckValue(Cells(1, 2)) = False Then
Cells(1, 3) = Cells(1, 2)
Cells(2, 3) = Cells(2, 2)
Exit Sub
End If
'終了日のチェック
If CheckValue(Cells(2, 2)) = False Then
Cells(1, 3) = Cells(1, 2)
Cells(2, 3) = Cells(2, 2)
Exit Sub
End If
'開始日から終了日を設定
nRow = 1
For nValue = Cells(1, 2) To Cells(2, 2)
Cells(nRow, 3) = nValue
Cells(nRow, 4) = Cells(1, 1) & "/" & nValue
nRow = nRow + 1
Next
End Sub

852 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:38.29 ID:jQ7od4vmd.net]
Private Function CheckValue(ByVal aValue As String) As Boolean
For nLoc = 1 To Len(aValue)
If InStr("0123456789", Mid(aValue, nLoc, 1)) = 0 Then
CheckValue = False
Exit Function
End If
Next
CheckValue = True
End Function

853 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:56.77 ID:1Fx06KPw0.net]
まじでこんな仕様を業務で使ってんの?



854 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:13:18.91 ID:24Y/Debo0.net]
Range型に入れられるものを変数に入れず処理するのほんと嫌い
Cells(1,1)=2 とか
せめて行と列をLong型の変数にしてやってあげて

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にすればなりますが論点はそこではありません






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef