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


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

Excel VBA 質問スレ Part70



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がある






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

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

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