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
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)),"") こんな感じではだめですか?
597 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:25:51.43 ID:v351dbwI0.net] >>592 合計なら楽なんですが、どうしても=+で数字を積み立てないとダメなんですよね、、 だから数式では解決できない気がします vbaでやるなら配列に詰め込んで最後に結合させるのかなあとか思ってるんですがなかなかいいコードが思い浮かばない、、
598 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:29:33.26 ID:v351dbwI0.net] >>593 ちなみに飛ばしたい表のB列は月というか 月 コード 〜 みたいな形になってて、月は横軸の大項目としてしか存在してないんですよね 色々厄介な作りになってまして、、
599 名前:デフォルトの名無しさん [2021/05/01(土) 17:33:09.92 ID:d9MtRRCh0.net] 知能に障害がある人ばかり質問するようになった感じ
600 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:49:10.58 ID:MA8kI4AW0.net] コロナ自粛でGW中だから暇なんだよ 暇な人に相手して欲しいんだよ
601 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:04:53.11 ID:QtACG4Vk0.net] 知恵袋でやれば良いと思う
602 名前:579 mailto:sage [2021/05/01(土) 18:07:44.96 ID:4GddeLjJM.net] >>581 > みたいな感じで月が同じでコードが一致してる場合だけ積み立てていくことってできますか? 月が同じってどこと同じなの? コードのようにどこかで指定するってこと? とりあえずコードがA列、金額がB列、月がC列に入っているとして Dim 元表 As Sheet: Set 元表 = Range("A1:C10") Dim 金額() As String: ReDim 金額(元表.Row To 元表.Row + 元表.Rows.Count - 1) Dim 書込行 As Long: 書込行 = LBound(金額) Dim 行 As Long For 行 = LBound(金額) To UBound(金額) If Cells(行, "A").Value = コード And Cells(行, "C").Value = 月 Then 金額(書込行) = Cells(行, "B").Value 書込行 = 書込行 + 1 End If Next ReDim Preserve 金額(LBound(金額) To 書込行 - 1) Range("D1").Formula = "=" & Join("+", 金額) みたいな感じでいけると思う >582 ごめん、テキトーにググって書いてるから間違えてるみたいやな Application.WorksheetFunction.Transpose にしといて
603 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:46:01.00 ID:z941MlAe0.net] >>599 最初の型はSheetじゃなくてRangeじゃね あとこの人の言ってるのは普通に文字列としてValueプロパティに式を書き込めばいいような気がするけど 上で語ってる人ってあんま教えに来ないよな
604 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:57:24.37 ID:v351dbwI0.net] >>599 試しにやろうとしたら最終行が型不一致でエラーになりました・・
605 名前:579 mailto:sage [2021/05/01(土) 19:57:34.66 ID:jFabojDWM.net] >>600 > 最初の型はSheetじゃなくてRangeじゃね すまん、そうだわ > あとこの人の言ってるのは普通に文字列としてValueプロパティに式を書き込めばいいような気がするけど ちょっと今試せないからやってみてくれ >>601 すまん Range("D1").Formula = "=" & Join(金額, "+") だったわ
606 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 20:06:26.75 ID:v351dbwI0.net] >>602 ありがとうございます。 今度は下から二行目でインデックスの範囲外エラーになりました、、 書込行が1行目だとredim〜のところの書込行-1が0になるからですかね?
607 名前:デフォルトの名無しさん [2021/05/01(土) 22:02:09.39 ID:ueS9oUA3M.net] >>603 自分で考えることくらいしろや、ゆとり
608 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:18:52.25 ID:T1b9C9NF0.net] dim hako() as variant redim hako(ここはデータ数を格納) for i = 0 to 回数 hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value next こんな感じで配列の中にセルの文字入れて行こうとするとエラーになるんですが原因分かる人居たら教えてください 便宜上cellの位置は1,1にしてますけど実際は縦が動いていきます
609 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:41:00.37 ID:/V6pM9G50.net] >>541 > これ、要するにString型変数の値は参照値って事? > 察してはいたけどByval xxx$って嘘じゃん 逆にC知ってると、文字列がプリミティブってのにものすごい 違和感があるよ。「ああ、内部で変換してんだな。そういうものだと 思っておこう」と、自分を納得させる。
610 名前:579 mailto:sage [2021/05/01(土) 22:45:28.00 ID:4GddeLjJM.net] >>603 条件に合うものがないと ReDim 金額(1 To 0) の様になってエラーになる VBAではReDimで空の配列は作れないので条件に合うものがない場合を場合分けして処理するしかない 例えば条件に合うものがない場合はD1を空にするなら最後の2行を Dim 式 As String If LBound(金額) < 書込行 <= Then ReDim Preserve 金額(LBound(金額) To 書込行 - 1) 式 = Join("+", 金額) Else 式 = """""" End If Range("D1").Formula = "=" & 式 とかにすればいい
611 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:53:14.11 ID:1m8BqwmN0.net] >>605 >hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value の、 Worksheets("Sheet1").Cells(1,1)が指してる先が数字でないなんてオチはないよね?
612 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:00:47.42 ID:T1b9C9NF0.net] >>608 今見てみたんですが ちゃんと数字を指してました
613 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:06:25.35 ID:v351dbwI0.net] >>607 すごい! ちょっと動くようになりました。 二行目のif文の<=って消していいですかね? 消さないとエラーになってしまったので ただ、式=join("+",金額)のところで型が一致しないエラーになりました
614 名前:デフォルトの名無しさん [2021/05/01(土) 23:16:54.43 ID:d9MtRRCh0.net] いつものあいつ確定
615 名前:579 mailto:sage [2021/05/01(土) 23:44:05.17 ID:ll+wAnFJM.net] >>610 > 二行目のif文の<=って消していいですかね? 消し忘れだ、すまん > ただ、式=join("+",金額)のところで型が一致しないエラーになりました デグレードしてる俺が悪いんだが、>>601 からの話と同じ
616 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:54:50.36 ID:v351dbwI0.net] >>612 凄いです!! 出来ました!! ちょっと実際の表でも細かい数字入れてみて検証してみます。 GW潰してずーっとこの問題を考えてました。 一筋の光が見えた気がします!!ありがとうございます。
617 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:42:00.36 ID:1V5M4ibt0.net] >>590 PowerPivotでDAX関数使えば出来るかも。
618 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:58:00.77 ID:1V5M4ibt0.net] で、建ててみた Excel ピボット Power Pivot DAX関数 質問スレ https://mevius.5ch.net/test/read.cgi/tech/1619916663/
619 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 10:03:52.79 ID:uM4tl5TR0.net] いきなり宣伝てアンタ
620 名前:579 mailto:sage [2021/05/02(日) 10:19:11.69 ID:72ULtZJbM.net] >>605 > エラーになるんですが なぜエラーメッセージを書かないの? >>608 数字でもダメでしょ hako(i) = Worksheets("Sheet1").Range(1, 1).Value になるだけだし
621 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 10:26:38.41 ID:GQme+tVN0.net] >>617 アプリケーション定義エラーまたはオブジェクトの定義エラーですってなります
622 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 11:31:48.49 ID:1V5M4ibt0.net] 2スレ目に何か書いとこうと思って、 とりあえず考えついたのがこれくらいしかなかった。 スンマセン
623 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 11:41:15.21 ID:nZ1YzZjsM.net] >>618 >>617 で頓珍漢なこと書いてたわスマン、数値かどうかは関係ないわ > hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value でエラーになるのか > 実際は縦が動いていきます の方でエラーになるのかどっち? 上でエラーになるなら1回目なのか何回かやったらエラーになるのかのどっち? 下でエラーになるならエラーになった時のセルの指定がおかしくないかを確認 あとシートの指定は変数に入れるかWithを使った方が楽だよ With Worksheets("Sheet1") For i = 0 to 回数 hako(i) = .Range(.Cells(1,1), .Cells(1,1)).Value Next End With
624 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:12:35.89 ID:GQme+tVN0.net] >>620 独学でやってたのでその辺の知識がなくてw withで指定するといちいち書かなくて済むんですね エラーになるのはもう1度目からです > hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value ここの時点でエラーになります。
625 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:42:32.96 ID:72ULtZJbM.net] >>621 切り分けとしてエラーになった時にイミディエイトウィンドウで hako(i) = Worksheets("Sheet1").Range("A1").Value Debug.Print Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value Debug.Print Worksheets("Sheet1").Cells(1,1).Address を実行してみて
626 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 13:21:44.18 ID:GQme+tVN0.net] >>622 あまり使ったことがない機能で分からないんですが 試しにA1に1という数字を置いて実行したら1という結果が出ました エラーは出なかったです
627 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 13:32:29.72 ID:MDNwXGbEd.net] エラーが出なくなったらよかった。 他に問題は? 解決?
628 名前:デフォルトの名無しさん [2021/05/02(日) 18:51:27.95 ID:U5GvC0it0.net] こういう人って文法は理解できないけど 自然言語みたいに丸暗記で覚えていくのかな?
629 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 19:13:05.11 ID:uM4tl5TR0.net] 〜10年後〜 「あ、ちゃんと覚えたほうが早かったんだ」 と、表面をなぞりまくる内に本質まで見えてきて最後に気づく人もいる 本業じゃないからね。仕方ないね。
630 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 19:18:03.74 ID:o6kkyx/e0.net] 類型から共通点を見出して次第にルールを覚えるのは自然界の学習形態に沿っている
631 名前:デフォルトの名無しさん [2021/05/02(日) 19:36:47.01 ID:U5GvC0it0.net] 古いBASICの構文が難しいからそこだけはしっかりと覚えたほうが早いんだけどね
632 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 02:05:26.31 ID:q65flA4Da.net] 10年後もこんなことやってるとかw
633 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 03:55:18.41 ID:xnojJk7TH.net] 一度普及した物は、減り続けても簡単にはなくならんよ PC-9801だっていまだに現役で使ってる工場とかあるし サポートがなくなって10年後でもVBAを使う職場は間違いなく世界中のどこかに残ってる
634 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 04:12:16.92 ID:mvyi8XcRa.net] 10年たってもエラーが直んないとかやっているのかと言う意味だ
635 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 07:31:09.68 ID:o8xt4Q4Ca.net] >>618 このエラーがでるとお手上げ さっぱりわからない
636 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 10:36:54.14 ID:lox1tlFa0.net] >>605 「回数」で動くわけないだろw 数字入れろつーの
637 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 10:55:13.04 ID:xPMfOD2I0.net] もはや社会人いないな
638 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 11:10:44.37 ID:l6TI+yt9M.net] >>633 > 「回数」で動くわけないだろw 普通に変数なり定数なりを定義したら動くだろ ツッコミならもっとおもしろいやつにしてくれ
639 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 12:03:06.50 ID:DAKb1uRk0.net] 0から始まるときは 回数-1 じゃね
640 名前:デフォルトの名無しさん [2021/05/03(月) 14:59:49.63 ID:po5ohrNh0.net] ttps://pastebin.pl/view/3a98fdc0 サムネイル画像の1番をクリックして表示された画像を順々にダウンロードするクローラみたいなものを作ろうとしてるのですが、 どうやったらサムネイル画像の1番めをクリックして表示された画像のURLを取得できるでしょうか?
641 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 18:17:11.84 ID:iRbOallH0.net] HTML の中には、サムネイル画像をクリックした時の、飛び先のリンクが書いてある。 (ただし、下には、@の文字を追加した) 最初の画像なら、 <a href="http@s://e-hentai.org/s/78a8543e34/1727798-1"> うまくスクレイピングすれば、このURL を抜き出せるのでは?
642 名前:デフォルトの名無しさん [2021/05/03(月) 20:20:21.53 ID:BZOTVT3k0.net] シート上の複数のリストボックスの選択済みをボタンを押すと 一括クリアしたいと思っています。 For i = 0 To ActiveSheet.OLEObjects("ListBox1").ListCount - 1 If ActiveSheet.OLEObjects("ListBox1").Selected(i) = True Then ActiveSheet.OLEObjects("ListBox1").Selected(i) = False End If Next i このコードではオブジェクトがないとエラーになります。 どなたかご教授ください。
643 名前:デフォルトの名無しさん [2021/05/03(月) 22:04:23.29 ID:0Wb20ZWw0.net] いつものあいつ
644 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 22:25:43.32 ID:iSjmevx80.net] そりゃオブジェクト指定してるのにオブジェクトなかったらエラーになる
645 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 23:09:22.50 ID:Z9IP11pi0.net] アクティブやセレクトの多用はエラー処理が面倒くさくなる場合が多い 根本的なトコロから考え直すヨロシ