- 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
- 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がある
- 582 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 05:48:25.12 ID:1uksgnWZM.net]
- >>575
Joinあるやろ 手元にExcelないから試してないけど Cells(3, 1).Formula = "=" & Join(Application.Transpose(Range("A1:C1" ).Value), "+") でいけないかな
- 583 名前:579 mailto:sage [2021/05/01(土) 06:04:07.19 ID:jbHbRAMYM.net]
- よく見たら行/列間違えてるわ
Cells(3, 1).Formula = "=" & Join(Application.Transpose(Range("A1:A3" ).Value), "+") だな Excel 2019ならVBA使わずに C1: =TEXTJOIN("+", TRUE, "=", A1:A3) でいけるかも
- 584 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 10:06:17.84 ID:v351dbwI0.net]
- >>580
例えば元表 コード 200 金額 200 5月 コード 150 金額 300 4月 コード 200 金額 500 5月 コード 150 金額 400 6月 コード 200 金額 50 5月 と並んでたとして、飛ばしたい表に コード200に一致した場合は=200+500+50 コード150 の4月は=300 みたいな感じで月が同じでコードが一致してる場合だけ積み立てていくことってできますか? うまくいかなくて、、
- 585 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 10:22:39.67 ID:orU8r25h0.net]
- >>580
別の質問だけど、 Application.Transpose って WorksheetFunction.Transpose の事? ApplicationってついてたらWorksheetFunctionは省略できるの?
- 586 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:16:18.88 ID:eT9ez6fta.net]
- こういう処理はピボットの得意分野だとおもう
ピボットスレにも聞いてみたらとうかな
- 587 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:18:22.06 ID:+awRLs9V0.net]
- ピボットスレってあったっけ?
- 588 名前:デフォルトの名無しさん [2021/05/01(土) 13:20:57.76 ID:GvoaCTGBM.net]
- >>582
互換、環境の違い……
- 589 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:30:58.50 ID:eT9ez6fta.net]
- ピボットを設定して
たて列を月 よこ列を単価 合計は "値で合計"にする <はじめは個数で合計>になってる いちばん間違えやすいところ
- 590 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 14:28:03.48 ID:FxNutXRP0.net]
- >>573
> >>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 あらためて ありがとうございます。 整数なら無視できるようになりました! あとは Sheets("s2").Cells(1, 3) にSheets("s1").Cells(1, 2).Valueが整数じゃなければSheets("s1").Cells(1, 1).Valueが入れば完璧です ちょっと自分でググってみます!もしできないようならまた質問させてください
- 591 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:00:22.43 ID:FcpS+0KE0.net]
- >>584
誰か建ててくれると期待してはや数年。。。
- 592 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:05:23.71 ID:+awRLs9V0.net]
- PowerQueryスレは建ったんだけど、
https://mevius.5ch.net/test/read.cgi/bsoft/1571540368/ ピボットスレ、建ててみる? 先日、総合相談スレでPowerPivot絡みの質問はあったが。
- 593 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:15:39.62 ID:v351dbwI0.net]
- >>586
ピボットだと=で積み立てで足していくようにできなくね? 合計しか出てこない
- 594 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 16:16:38.30 ID:eT9ez6fta.net]
- あーそうかも
やはりピボットスレが立つまで待ちますか
- 595 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 16:42:05.48 ID:AMC1YaHy0.net]
- >>581
それは、たとえば、元表にB1&countif(B$1:B1,B1)みたいな作業列を作って 飛ばしたい表に、iferror(index(D:D,match(作業列,コード&column()+1,0)),"") みたいな数式を貼り付けるのではだめですか? 1つのセルに、数式として入っている必要性が、あるのですか?
- 596 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:05:58.85 ID:AMC1YaHy0.net]
- >>592修正、matchの書式も違うし
月も必要なので、B1&E1 を作業列Fに、count(F$1:F1,F1)を作業列Gに入れて 飛ばしたい表のA列はコード、B列は月、C列以降にiferror(index(元表!$D:$D,match($A1&$B1&column()-2,元表!$F:$F,0)),"") こんな感じではだめですか?
|

|