- 1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net]
- !extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part69 https://mevius.5ch.net/test/read.cgi/tech/1607786543/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 481 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 02:49:41.12 ID:R/cV679Q0.net]
- 他人の事情なんか配慮しないのがデキるプログラマー
- 482 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 03:25:04.10 ID:yYRagbWx0.net]
- >>475
Variantの()で宣言した変数はVariant配列型の変数で、Valueの戻り値もちゃんと代入できるよ ただし複数セルを参照しててValueが二次元配列を返すときに限る 一つのセルだけしか参照してない場合は配列を返さないので型不一致になる
- 483 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 05:59:25.47 ID:OKDjIMLh0.net]
- そういやvbaの配列は、
・配列じゃない値 ・countが1の配列 これが微妙に違っていた気がする
- 484 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 07:14:02.38 ID:X/WADpVMH.net]
- >>480
何が言いたいのかわからん ほかの言語でも単純な変数と要素が1個の配列変数は厳密に区別されるのが普通だし
- 485 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 12:09:24.67 ID:Jq2bf8XLa.net]
- 配列にはいれっ
- 486 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 13:41:38.64 ID:K3oXR9qNa.net]
- 変数を反芻
- 487 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 14:02:46.34 ID:GqNxFOs40.net]
- Excelのオブジェクトを操作したときの動きからVBAの仕様を推測して
混乱してるように見えるな。質問スレじゃなくて、VBAについて教えて くれる人や本やサイトを探した方がいいんじゃないか。
- 488 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:07:20.75 ID:fsi6lQwja.net]
- ベテランの初心者がきました
よろぴく
- 489 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:31:32.06 ID:xYFjFFNHa.net]
- エラー429は自力で解決したのでもういいです。
- 490 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:41:38.21 ID:xYFjFFNHa.net]
- 理由はただの書き間違いでした。
- 491 名前:デフォルトの名無しさん [2021/04/28(水) 19:45:56.67 ID:Sz6ocakQM.net]
- 429 = 死肉
- 492 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 23:01:14.39 ID:gO4+NyeW0.net]
- >>479
Variant型の配列っていうのがあるんだね 配列でないVariant型ならデータが入っていればVariant型ではない(代入した型に変換される) だからデータが入っているVariant型の配列って無いと思ってた これ以上は切りが無くなりそうなので止めます ありがとう
- 493 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 02:21:41.91 ID:EFUE1W1F0.net]
- 最初から配列であることを宣言した場合と、
Variantに配列をぶっこんだ場合は、 区別しないといけない
- 494 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 03:35:54.80 ID:xPFf86S80.net]
- Variant型は調べれば調べるほど「???」ってなるから気をつけて
VB.Netでは廃止されたくらいの型だから 俺も最初調べててVariant型って内部型とか持ってるし 代入したものの参照でも抱えているだけのものと高を括ってたけど Variant型の配列を作ってある要素には値型、ある要素には参照型を設定して関数の引数に値渡しで渡すと きちんと値型の部分は値が、参照型の部分は参照が渡されるのは少し前にレスした通り そもそも何で配列の値渡しは出来ないのにVariant型に入れると値渡しが出来るような思想で作られているのかも謎。そういうものだと思う他ない。 VBAがObject指向に片足を突っ込んでいるところで止まっているせいか、Objectでもそうでないものも代入出来る型として存在していて使い勝手が良い反面、 コンパイル時に内部型が違う場合でもエラーにならないから実行時に初めてエラーとなって気がついたり、 違う型のものを上書いてしまってエラーとならずに期待した挙動と変わってしまう場合が出て来る恐ろしい型でもある。 Variant型を使うなとは言えないけど 使う際にはその特性と挙動を十分把握していないと、ちょっと何か変わったことをしただけで期待した結果が得られないことになり得るから十分気をつけてね。
- 495 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 03:54:38.48 ID:xPFf86S80.net]
- 余談だけど他の言語にも
例えばJavaScriptやC#には変数宣言する際に、型にvarって宣言することがあるけど、これはVariableと言って全然別物で 最初に代入した値の型をJavaScriptでは暗黙的に、C#では型推論で持ち回るものだから、もし、今後そう言った別言語を扱うことがあれば そういうものだと覚えておけば勘違いしなくて済むよ。
- 496 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:09:50.46 ID:S4zpEuOGH.net]
- Variant型っていうのはVBAやVBのために作られたわけじゃない
もともとWindowクラスが持ってる機能に対して、演算子をオーバーロードした物
- 497 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:17:04.92 ID:K+5EoiH2M.net]
- >>491
> VB.Netでは廃止されたくらいの型だから 単にObject型になっただけ 使い勝手が違うのはVB.NETの方が方に厳しいから暗黙の型変換をしなかったりするため
- 498 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:50:30.24 ID:S4zpEuOGH.net]
- >>494
VariantとObjectは同じような物とか代替品として紹介してるサイトとかあるけど、これはあくまでも初心者向けの説明 実際はまったく違う物なので、個人的にはこうやって説明するのも反対したいところ
- 499 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:11:32.09 ID:uNZAJPBsM.net]
- >>495
はあ? 違うと言うならどう違うのか書いてみなよ まさかと思うけどVBAのObjectの話じゃないよな?
- 500 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:11:42.35 ID:xPFf86S80.net]
- >>495
そうなんだよね Variantの代わりがObjectだと言われると うーん、まぁ間違っていないとは思うけど 物凄い違和感を感じるよね。 同じものかと言われれば絶対別物と はっきり言うことが出来るけど。
- 501 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:17:49.07 ID:xPFf86S80.net]
- >>496
そうだねぇ とりあえずこんなところかねぇ ちなみに、何でも入る魔法の型といえば、C#ではobject型がそれに当たる。しかし、object型とVariant型は同じではない。object型は参照型であり、値型の値を扱うにはボックス化という手順が必要になる。また、参照型である以上、メモリの確保と破棄というオーバーヘッドが必ず付いて回る。しかし、Variant型は整数のような値であっても、オブジェクトへの参照であっても、それをそのまま格納できる。ボックス化やメモリの確保、解放のオーバーヘッドもない。まさに万能の魔法の箱である。 https://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_12/extremecs_12_02.html
- 502 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:22:43.60 ID:r4t8KOvl0.net]
- >>493
>演算子をオーバーロードした物 どの演算子? >>498 これってヒープ領域に全部突っ込んでるってこと?
- 503 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:23:03.00 ID:r4t8KOvl0.net]
- なわけないか
- 504 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:25:47.75 ID:iJcHPvsoa.net]
- VBAとVB.netはまったく別物で比較しようなんて思わない
標準がバリアントなんだからできるだけバリアントを使うべきだし 値渡しの件も、VBAでは値渡しのが原則なんだから 値渡しのオンリーにすべきとおもうけど どうしても参照渡したいならパブリックにするだけ
- 505 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:36:18.54 ID:xmHZYPrVM.net]
- >>498
そこまで言うならStructureでVariant相当のものを作ればいいかと >>499 > これってヒープ領域に全部突っ込んでるってこと? そう言うこと
- 506 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:48:54.45 ID:S4zpEuOGH.net]
- >>499
算術演算子などで文字列を自動的に数値に変換する部分 >>501 厳密な説明をするなら、Variantは暗黙ではあるけど標準ではない 納得いかない人もいるだろうけど、強いて言うなら標準に近いのはObject型の方 Variant型はWindowクラスからの継承だから、VBでもVBAでも、もっと別の言語でも内部ではまったく同じ物で同じ処理が動いてる 何を使う「べき」かはケースバイケース
- 507 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:55:26.52 ID:r4t8KOvl0.net]
- >>502
冗談で言ったらマジか まぁオブジェクトは参照になるなら、ヒープ領域云々はそこまで考えなくてもいいか vbaの文字列は文字の配列じゃなく単に値だったから、variantで文字列使いまくると良くない? ※そもそも値じゃなかったらごめん
- 508 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:01:54.76 ID:xPFf86S80.net]
- >>503
へぇ VBAやVB6みたいにVariant型みたいなもの 持ってる言語って他にもあるんだ まだ当たったことないなぁ
- 509 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:12:11.05 ID:iJcHPvsoa.net]
- VBのときに他の言語がどうこうと長話はじめるのは老害みたいなもの
気をつけたほうがよい
- 510 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:17:52.33 ID:xPFf86S80.net]
- 老害だもの
みつを
- 511 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:45:33.51 ID:530kL6INd.net]
- >>505
VBS もしかして知っててわざと試してる?
- 512 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 09:13:27.94 ID:xPFf86S80.net]
- >>508
そうかVBSは明示的に型宣言することないから忘れてた
- 513 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 09:39:50.72 ID:S4zpEuOGH.net]
- Visual StudioのC++のVariantクラスも構造体の中身はまったく同じ
- 514 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 12:13:26.48 ID:iJcHPvsoa.net]
- そうなると
VBSにてintの宣言をしたいときはどうなるの
- 515 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 12:38:49.55 ID:q/beK7t50.net]
- その辺考慮することでExcelのマクロとしてどんなメリットがあるの?
- 516 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:12:06.33 ID:KFW9RSkud.net]
- >>511 不可能
- 517 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:13:04.28 ID:Z9k/ziJ20.net]
- よくわからんけど一般的な仕事に使うのに知る必要のある情報じゃなさそう
- 518 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:16:00.97 ID:KFW9RSkud.net]
- >>512
Variantは多機能だからプログラミングの負担を減らすことができるけど、メモリ食いだから、たとえば大きい配列が宣言できなかったりする
- 519 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 16:00:22.26 ID:EFUE1W1F0.net]
- AccessVBAエキスパートの試験では扱う範囲
ExcelVBAエキスパートでは気にしたくていい 試験はAccessVBAの方が2段くらい難しい もちろんスタンダードの話な
- 520 名前:デフォルトの名無しさん [2021/04/29(木) 16:53:35.51 ID:aGUEXGqc0.net]
- エクセルで組んだ表や数式を
いつパソコンが壊れても すぐ復元できるよう メモに残しておきたいんですが すでにある内容を HTML文書みたいに文字だけに変換できたりってするんですか?
- 521 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 17:08:19.64 ID:Z9k/ziJ20.net]
- 素直にバックアップとるかクラウドで良くないですか
- 522 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 18:10:50.49 ID:MWXZTeF3a.net]
- >>517
壊れたパソコンには復元できないよ
- 523 名前:デフォルトの名無しさん [2021/04/29(木) 18:18:45.59 ID:aGUEXGqc0.net]
- 再現っていえばいいのかなんといえばいいのか…
とりあえずもしもの時のためにレシピ?を残しておきたい
- 524 名前:デフォルトの名無しさん [2021/04/29(木) 18:24:10.96 ID:aTZmoNVK0.net]
- .slk マルチプラン形式ならテキストとして読めるぞ
- 525 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 19:07:29.38 ID:k0BuRVHXa.net]
- >>515
大きい配列 エクセルのマクロで画像処理している人だよな 1セル1ドットにして輪郭をさがしてる ちょっと感動
- 526 名前:デフォルトの名無しさん [2021/04/29(木) 19:41:36.50 ID:gMCbhKMx0.net]
- >>520
バックアップしろよ 馬鹿は帰れ
- 527 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 19:42:12.84 ID:I+JPieVz0.net]
- >>517
俺、自分宛にメールしてるわ。 Sub Test() : End Sub って
- 528 名前:デフォルトの名無しさん [2021/04/29(木) 19:53:50.93 ID:aGUEXGqc0.net]
- フラッシュメモリーに保存してるけどそれも壊れるかもしれないし
- 529 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 20:04:58.52 ID:Z9k/ziJ20.net]
- だからグーグルのクラウドにでも保存しとけよ
- 530 名前:デフォルトの名無しさん [2021/04/29(木) 21:46:03.77 ID:gMCbhKMx0.net]
- >>525
馬鹿は帰れ
- 531 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 21:47:52.03 ID:qBmeMAVZa.net]
- >>525
VBAより先に勉強すべきことがある
- 532 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 21:57:15.15 ID:r4t8KOvl0.net]
- >>514
こういう罠みたいな仕様を事前に目を通しておくと躓く事が少なくなる 一生役に立たん可能性も割とあるけどな
- 533 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:10:52.82 ID:G7lq05sG0.net]
- これを短く書きたいのですが、どう書けばいいですか?
Range(Cells(r, 1),Cells(r, 10)).Select Range(Selection, Selection.End(xlDown)).Select Selection.CurrentRegion.Borders.LineStyle = xlContinuous
- 534 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:13:18.87 ID:1H39I5ca0.net]
- >>520
カセットテープに保存しとけよ
- 535 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:38:44.27 ID:XMOC9xEV0.net]
- >>530
やりたいことは Range(Cells(r, 1),Cells(r, 10)) ・・・ Range(Cells(r, 11),Cells(r, 20) みたいなこと? 全容を見せてくれたほうが早いと思う。
- 536 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 02:19:19.76 ID:zq+mlYyf0.net]
- >>530
やりたいことを言葉で説明した方が速そう
- 537 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 02:34:26.19 ID:zq+mlYyf0.net]
- >>493
>もともとWindowクラスが持ってる機能に対して、 これ気になるんですが、何かソースありますか?
- 538 名前:デフォルトの名無しさん [2021/04/30(金) 02:53:52.43 ID:sRtBXBMU0.net]
- Excelのマクロをエクセル環境なしに実行したいのですが、
vbsをつかえばExcelは不要ですか?
- 539 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:01:21.54 ID:XMOC9xEV0.net]
- variantって共用体なのね
データタイプを示すヘッダがあってその後に実体がある https://excel-ubara.com/excelvba4/EXCEL_VBA_422.html
- 540 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:02:27.11 ID:XMOC9xEV0.net]
- >>535
vbsってのもある。ファイルの名前の一括変換、辺りならvbsで可能 EXCELのa1セルをb1セルにコピー〜みたいなのはEXCELが必要
- 541 名前:デフォルトの名無しさん [2021/04/30(金) 03:04:35.08 ID:sRtBXBMU0.net]
- >>537
すでにあるマクロ名を実行することは vbsだけで、実行する側にExcelがなくても可能ですか?
- 542 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:23:39.09 ID:zq+mlYyf0.net]
- vbsは型宣言が出来ない、
VBAで可能なライブラリ参照が出来ない、 暗黙の参照先等の違いがる それらを使用していないコードなら実行出来る可能性がある (要するに簡単にはいかない) 正直「みんな入れてるであろうエクセルで実行できる」っていうただ一つのメリットのみを目的ににして わざわざ使いにくいVBAを仕方なしに許容してるのであって、 エクセル不要ならPythonなりJSなりC#で書くべき
- 543 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:29:54.28 ID:XMOC9xEV0.net]
- >>538
内容による vbsとvbaは似て非なるもの、だけど互換性はまぁまぁある vbaをまるっとvbsにコピペして動くものもあれば、手直ししないと動かないもの、絶対に無理なものもある まぁコピーペーストだけで一発で動くのは稀だとは思う。大体動かないだろう また、vbsは無料でwindowsに標準でついているので、あーだこーだ言うよりはやったほうが早い
- 544 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:37:12.82 ID:zq+mlYyf0.net]
- >>536
貼ってくれたURLのページにある >String型変数のメモリアドレス これ、要するにString型変数の値は参照値って事? 察してはいたけどByval xxx$って嘘じゃん 調べれば調べるほど無茶苦茶な言語だなw ただ先頭に配列長が入ってるのは嬉しいな LEN関数が高速だって事だし、実際に検証したらそうだった これからは文字列の有無はLEN関数を使おう
- 545 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 04:58:51.13 ID:VHqB9FfdH.net]
- >>534
MSDNのWin32APIのリファレンス https://docs.microsoft.com/en-us/windows/win32/api/oaidl/ns-oaidl-variant これを見れば、Valiant構造体は共用体の入った構造体が共用体になってることが一目瞭然 VBAからは、初期化の手順を省略(自動化)したりして簡単に使えるようにしてある
- 546 名前:デフォルトの名無しさん [2021/04/30(金) 06:01:15.47 ID:w8M9C8im0.net]
- Dim abc As Variant, maxVal Variant
abc = Range("A1:A100") ・ ・ ・ maxVal = WorksheetFunction.Max(abc(50 To 80, 1)) これはabc(50 To 80, 1)の部分でコンパイルエラーになりますが、 このように一発で配列内の特定の範囲の値を取得することはできますか? やはりFor〜Nextで回してやらないと駄目でしょうか?
- 547 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 06:19:01.47 ID:VHqB9FfdH.net]
- >>543
配列のままだとループして調べるしかない 作業用のワークシートに入れてからMAX関数を使えば一発
- 548 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 07:04:01.89 ID:M0On9wgSM.net]
- >>541
> 察してはいたけどByval xxx$って嘘じゃん 噓じゃねーよ、Byvalならちゃんとコピーされる(内部的には新規領域確保して内容コピー) > 調べれば調べるほど無茶苦茶な言語だなw お前さんの理解力が足らんだけ
- 549 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 07:57:01.95 ID:VHqB9FfdH.net]
- メモリ上で文字列領域の先頭に長さが入ってるのはMicrosoft BASICの伝統
C言語などで使われる\x00で区切る方式だと文字列の中にChr$(&h00)を入れられなくなるので地味に面倒だった
- 550 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 09:18:44.82 ID:XMOC9xEV0.net]
- だから、有限なんですね
- 551 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 09:53:25.08 ID:JEk9gHJMa.net]
- 改行しろよ、読みにくいだろ
- 552 名前:デフォルトの名無しさん [2021/04/30(金) 10:28:11.61 ID:8Lrh8uSx0.net]
- >>544
やはりループで調べるしかないんですね >作業用のワークシート なるほど、アクセスで言うところのワークテーブル的な考えですね ありがとうございました。
- 553 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 10:56:55.90 ID:S41gzW82a.net]
- WorksheetFunctionってその名の通りワークシート上の計算をするためのものだから仕方ないわな
- 554 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:14:51.01 ID:lXELEtlJ0.net]
- >>543
それはabc(50 To 80, 1)なんていうのがおかしくて maxVal = WorksheetFunction.Max(abc) ならちゃんと動く >>550 WorksheetFunctionは実は配列受け取るものが結構あるんだぜ
- 555 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:46:28.53 ID:VHqB9FfdH.net]
- >>551
質問者は配列全体じゃなくて調べる範囲を指定したいんだよ 目的と違う回答してどうすんの
- 556 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:52:18.51 ID:4gSq67JmM.net]
- 質問者を納得させるのではなく
自分の知識をドヤ顔で披露する場がこのスレ
- 557 名前:デフォルトの名無しさん [2021/04/30(金) 13:55:12.85 ID:clFaH4DRM.net]
- 古代BASIC語の使えるやつには想像すらできない構文だな
ナウい言語から入るとこんな発想が出来るのか Enumeraterとか作ってもコールバック関数書くのが面倒くさいからどうしようもないよね
- 558 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 14:11:06.28 ID:lUzIA11U0.net]
- 10 CONSOLE 0,25,0,1
20 SCRERN 0,0
- 559 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 14:13:33.94 ID:1H39I5ca0.net]
- >>552
それはいいすぎ いろんな考えがあって質問者がいろんな回答から判断すればいいだけのこと
- 560 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 16:19:17.86 ID:W9vsivKyd.net]
- sheet1のB1が整数ならSheet2のC1
にSheet1のB1の整数をSheet2のC1に 表示し Sheet1のB1が整数でない場合は Sheet2のC1にSheet1のA1の整数を表示 させたいのですが、インデックス範囲エラーになったりして困ってます Numeric関数なのはわかるんですが 標準モジュールに書くのか Sheet1に書くのかわかりません ご教授ください Private Sub Worksheet_Change(ByVal Taget as Range) If IsNumeric(Worksheets("1").Range)
- 561 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 16:51:06.75 ID:S41gzW82a.net]
- >>557
シート名(worksheet.name)はどっち? ・sheet1 ・1 それとも1番目のシート?それなら Worksheets(1) だけど
- 562 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 17:19:44.60 ID:W9vsivKyd.net]
- Sheet1にコードを書いてます
- 563 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:10:46.17 ID:qIU2nW870.net]
- そもそもnumericって整数かどうかじゃなくて
数字かどうかの判定じゃなかったか?
- 564 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:11:19.57 ID:qIU2nW870.net]
- あとrangeじゃなくてtargetやろ
- 565 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:12:09.12 ID:qIU2nW870.net]
- あっrangeであってたわ
range(target.address)かな
- 566 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:13:35.28 ID:1H39I5ca0.net]
- >>557
Worksheet_Change これはワークシートに変更があったときに実行する内容を書くので 実行したいワークシートに書くのと、書いたワークシート以外のワークシートの変更は無視する
- 567 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:48:53.26 ID:W9vsivKyd.net]
- Sheet1のB1の値が変化したらSheet2のC1が変化させたいのでSheet1にコードを書いてチェンジイベントでいいのかな?
むずかしいですね
- 568 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:15:34.30 ID:zq+mlYyf0.net]
- >>545
値渡しは参照値が渡されるって挙動と矛盾してるだろ その辺の矛盾の解決のためか、 実際に配列は値渡ししかできないように強制されてる
- 569 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:20:31.83 ID:zq+mlYyf0.net]
- >>565
値渡しは参照値が渡される ↓ 値渡しは、変数に格納されてるのが参照値(メモリアドレス)なら参照値が渡される
- 570 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:52:12.56 ID:BfTXTUZEM.net]
- >>565
元々文字列は内容変わったら領域確保し直したりするから内部的に参照持つのが普通 ByVal は文字列を複製して渡すしByRefは内部的な参照への参照を渡す 何の矛盾もないよ 中途半端に内部的な参照を気にしてもしょうがないよ
- 571 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:55:44.24 ID:lUzIA11U0.net]
- >>565
え?そうだっけ? 確か配列は参照渡ししか出来ないから Variant型に突っ込んで渡して 値型のものを渡すようにするんじゃなかったっけ? もっともそれでも参照型のものは参照が渡されるけど。
- 572 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 22:00:13.74 ID:HAcSh5oY0.net]
- 誰か教えてほしいんですが、
数字を単純に足すんじゃなくて=+100+200というふうに増えた数字を全部数式に残していくように一つのセルに入れていくやり方ってありますか? 例えば別のシートに100 200 350とあったら 記録用のシートのセルに=100+200+350と飛ばしたいです。 セルの中身見た時に650となってるのではなくて=100+200+350と表示されてほしい
- 573 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 22:02:58.83 ID:lUzIA11U0.net]
- >>569
単純にCStrで数字を文字列に変換して繋げばいいだけと思うけどそういう意味じゃない?
- 574 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:05:04.91 ID:ftoQG8Lta.net]
- >>564
ふつうに関数でよくないの =IF(B2=int(B2),A2,B2) みたいなの
- 575 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:07:22.57 ID:ftoQG8Lta.net]
- >>569
これも式を表示するモードがあったはず
- 576 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:09:00.86 ID:XMOC9xEV0.net]
- >>557
sheet1モジュールに書く シート名はs1とs2にしてるのでテキトーに変えて Private Sub Worksheet_Change(ByVal Target As Range) If _ Target.Address <> "$B$1" _ Or Not (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 2).Value main2 = Cells(1, 1).Value If (Int(main) - (main)) = 0 Then Sheets("s2").Cells(1, 3) = main Else Sheets("s2").Cells(1, 3) = Int(main2) End If End Sub
- 577 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:13:44.15 ID:XMOC9xEV0.net]
- >>569
地味にやるしかない Sub foo() Cells(3, 1).Formula = "=" & Cells(1, 1).Value & "+" & Cells(2, 1) End Sub 量が多いならfornextかなんかで処理すると良い
- 578 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:13:57.10 ID:XMOC9xEV0.net]
- joinほしい
- 579 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:21:20.34 ID:W9vsivKyd.net]
- >>573
ありがとうございます! 今外にいるのでお家に帰ったら試して見ます
- 580 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:40:08.54 ID:HAcSh5oY0.net]
- >>570
そんな感じで大丈夫です >>574 数がかなりあるんでループさせて特定の月の数字を拾うところまではできてたんで、そのやり方試してみます。
- 581 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 00:46:43.32 ID:zFFwGDhV0.net]
- CONCATがある
|

|