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


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

Excel VBA 質問スレ Part79(ワッチョイあり)



1 名前:デフォルトの名無しさん [2023/01/28(土) 12:12:12.41 ID:UjlIZ1Ov0.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part77
https://mevius.2ch.net/test/read.cgi/tech/1658009255/
Excel VBA 質問スレ Part78
https://mevius.2ch.net/test/read.cgi/tech/1667104996/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

33 名前:デフォルトの名無しさん mailto:sage [2023/01/30(月) 21:40:04.89 ID:dCL8a0ux0.net]
>>32
正しい余白ならインデントってのがあるが

CSVにしたらどうせ書式はなくなるのに、書式を空白で表そうとするEXCELが気持ち悪いのか
そのくせインデントは無視するという

34 名前:デフォルトの名無しさん mailto:sage [2023/01/30(月) 22:17:38.88 ID:uC26F0Aa0.net]
>>33
なるほどインデントは忘れてたわw

35 名前:デフォルトの名無しさん (アウアウウー Sa47-DSsr) mailto:sage [2023/01/31(火) 05:21:30.98 ID:JnYo5yDia.net]
余白はデータじゃなくて、見た目。
見た目のために、データを変更するのか?

それなら、trim などで、データの先頭末尾の空白類を除去する必要がある

36 名前:デフォルトの名無しさん [2023/01/31(火) 12:24:23.88 ID:XEbPQm8Ra.net]
余白は木を切る~

37 名前:デフォルトの名無しさん (ワッチョイ 5f10-exzg) mailto:sage [2023/01/31(火) 15:00:10.31 ID:bFYKhQ9l0.net]
うまい!座布団何枚?

38 名前:20 mailto:sage [2023/02/01(水) 15:16:25.31 ID:J3cdB8RP0.net]
>>25
レス感謝です。
呼び出しだけなので「お父さんやって」的なイメージでした。

>もし同じような親クラスDを作成して同じ子クラスを
>使おうとするとその中で親クラスAを作成することが
>前提となってしまい、親クラスDでは使えない場合が出てくる。

ここがわかりませんでした。

ClsFatherとClsSonの二つがあるとします。
メインでClsFatherから父親シルバを作成、
自動的にClsFatherの中で息子キルアが作成されて父親のプロパティにセットされる
親クラスDにあたる父親ジンをClsFatherから作成して、息子ゴンがを作成される
息子ジンが継承もどきで使う機能は父親ドンのだけのつもりでしたが、
継承って本来は父親シルバ、息子ゴンみたいな組合せも自由に出来るものって意味だから
それじゃ違うよってことですか?

息子ゴンのメソッドでどの親メソッドを継承するかをImprementsとかで動的にしなさいということですか?

39 名前:デフォルトの名無しさん mailto:sage [2023/02/01(水) 18:01:33.64 ID:lcTv0p8q0.net]
>>38
親が子を生成するのはいいけど、お前の設計では子が親インスタンスを生成するんじゃないのか?
ジンがゴンを生成しても、ゴンの親はゴンがきめるんだぞ

40 名前:38 mailto:sage [2023/02/01(水) 19:12:55.35 ID:J3cdB8RP0.net]
>>39
そうです。子も親のインスタンスを生成します。
当然オブジェクトとしては別物ですが、同じクラスからの生成ですので、
同じ親の機能を使えるという意味です。

実際にゴンはジンを作れず、ジンとほぼ同じ能力を持つ別の何かの力を使って
継承に見せかけるという事です。

この見せかけ行為が本当の意味での親オブジェクトの機能継承にあたらず危ないよって意味でしょうか?
で、本当の意味での親オブジェクトの機能を使うならCallByNameやImprementsを使いなよって意味でしょうか?

41 名前:40 mailto:sage [2023/02/01(水) 22:04:53.94 ID:J3cdB8RP0.net]
すみません。質問途中に別の質問をする事になってしまいます。
自力で解決出来ませんでした。

VBEのCtrl+hボタンで出てくる置換機能で、パターンマッチングを使用するにチェックを入れました。
Ai.Erase
Ai.Create
AiErase
AiCreate

この4つのワードにおいて、パターンマッチングとして
Ai[AE]としたら下の二つにだけマッチングしました。
そしたら一致したAとEは温存しつつAiとA or Eの間にどっとを入れたいのです。

実際はもう少し複雑なパターンなのですが。簡略化するとこんな感じです。
一致したAとEが消えてしまうので困っているのです。
一致した[AE]のどちらかをそのまま残したいと
Ai.[AE]みたいにしても置換後文字列はAi.[AE]がそのまま出てきてしまいます。

思ってるような使い方は出来ないという事でよろしいでしょうか?



42 名前:デフォルトの名無しさん (ワッチョイ 8a3d-0rrK) mailto:sage [2023/02/03(金) 01:33:26.18 ID:0K9bvbAh0.net]
Sub test_if()
a = -1
If a >= 2 Then
Debug.Print "aは2以上"
Else
Debug.Print "aは2未満"
End If
End Sub

というマクロなんだけど<>を使わずに同じことが可能?
<>はネット上では禁止されてる場合があるので。

43 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 06:07:59.84 ID:VZIBsXzk0.net]
範囲を指定できるのであればCase文でtoを使うとかかな

44 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 07:22:57.06 ID:3sKN4Loqa.net]
>>42
完全に同じかどうかは知らんが
If Application.WorksheetFunction.Min(a, 2) = 2 Then

45 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 11:32:43.16 ID:bf4OLvi00.net]
オートフィルタの或る列が昇順でソートされているかどうか
を判定する方法を教えて下さい。

46 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 11:36:12.10 ID:bf4OLvi00.net]
>>45
昇順か降順かは問わず、ソートされているかどうかでした。

47 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 19:20:46.12 ID:UC5jDXxN0.net]
>>45
自分でソートしたものと比較して同じ順番だったらソートされているといえる

48 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 19:24:07.79 ID:fZLyE03H0.net]
いや待て、どっかのプロパティにフラグがないかを尋ねてるんだと思うぞ
俺は知らないがな

49 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 20:25:48.41 ID:6Slrjruv0.net]
フィルターのボタンに↑↓とか表示されない?抽出とかだとロートの図が出てたり?

50 名前:デフォルトの名無しさん [2023/02/04(土) 01:29:18.62 ID:Wbq5qWPo0.net]
>>38
そそ、
そういう「どっちの親でも使える」ようにするために
そういう場合は継承は使わずに、移譲でやるのがいいんじゃないかと。
そもそもVBAじゃ厳密な意味の継承は使えないけどね。

51 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 03:13:48.63 ID:5cp+GCIG0.net]
一次元配列の中に二次元配列を入れるのってシートから二次元配列として取り込まない限り無理ですか?
例えばa(2)って一次元配列を作って
a(0)=cells(1,1).currentregion
とした場合、a(0)(1,1)と格納されるよね。
一方、b(2)って一次元配列をつくってそこに2次元配列を格納しようとしてredim b(0)(100,100)って宣言してもエラーになるよね?



52 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 03:22:13.04 ID:5cp+GCIG0.net]
特に複数のcsvを一次元配列ごとに二次元配列として取り込みたかったんたけど、それができなくて困ってます
0.csv→a(0)に二次元配列として格納
1.csv→a(1)に二次元配列として格納
2.csv→a(2)に二次元配列として格納
よくありそうなパターンですけどネットで調べても出てこなくて…
何かいいアイディアはあるでしょうか?

53 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:12:27.84 ID:JIMr/Iwq0.net]
>>52
csvを格納するならそのまま格納して取り出すときにsplitで配列化したらどうか。
デリミタ変えてcsvを繋げてあげれば擬似的に2次元配列に出来んじゃね?

54 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:14:50.01 ID:JIMr/Iwq0.net]
>>53
あるいはdirectoryのitemに2次元配列としてaddするか

55 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:19:01.21 ID:JIMr/Iwq0.net]
>>54

> >>53
>スマン。directoryじゃなくてdictionaryだw

56 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 08:21:23.33 ID:XHbOUS2x0.net]
>>48
その通りです。ネット検索しても出て来ないため、ここで聞いてみてどうかなと思いました。
>>49さん仰るように矢印がボタンに表示されるので、何かあるはずと思ったのです。

57 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 09:06:33.92 ID:YYLIzwcR0.net]
>>45
ググっただけだけど
Worksheet.AutoFilter.Sort.SortFields
あたりを見ればわかるんじゃね?
てかMSのDocsもこの辺りのドキュメントが貧相で困るわ

58 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 09:14:10.73 ID:xQtdr6Ugd.net]
>>45
AIさんからの天の声です

Sub CheckSortOrder()
Dim sortOrder As Boolean
sortOrder = ActiveSheet.AutoFilter.Sort.SortOn
If sortOrder = True Then
MsgBox "The column is sorted in ascending order."
Else
MsgBox "The column is not sorted in ascending order."
End If
End Sub

59 名前:デフォルトの名無しさん (ワッチョイ 8fda-EOzK) mailto:sage [2023/02/04(土) 10:59:33.56 ID:mzRI23fF0.net]
>>58
だからさ、そのコードが有効かどうかを、先ずはじぶんで検証しろよ ゴミコードだろうと何でも貼りゃあいいってもんじゃねーぞ
△! オブジェクトは、このプロパティまたはメソッドをサポートしていません。だぞ おま環のせいで動作しないだけってか?
検証もしてない野良コードは世間の大迷惑 AIなら間違わないってか? 訊ねる人間側に問題あるからゴミコード吐くのに気付け

60 名前:デフォルトの名無しさん (スプッッ Sddf-D+99) mailto:sage [2023/02/04(土) 11:20:43.51 ID:EUGDlgP1d.net]
>>59
そのコードを検証することは重要です。そのコードが有効かどうかは、まず自分で確認する必要があります。「AIなら間違わない」という考え方は誤りです。AIモデルはトレーニングデータから学習するだけであり、常に正確ではありません。野良コードを使用しても問題が起こる可能性があり、それが世間を混乱させることがあります。

61 名前:デフォルトの名無しさん (ワッチョイ 4f01-Rev0) mailto:sage [2023/02/04(土) 13:12:21.87 ID:sIc7L3oe0.net]
>>53
「csvを格納するならそのまま格納して」って言うのが、まさにその方法を知りたいっていう質問でした
Line Inputをつかって一行ずつ一次元配列に分割して、それを二次元配列に格納して、二次元配列の一次元目を増やして…ってのを繰り返すってのを考えました
(二次元配列の一次元目を増やすプロシージャを作成する前提)
ところがredim b(0)(100,100)という宣言自体がエラーになるのでどうしたものかと



62 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 14:48:40.79 ID:JIMr/Iwq0.net]
>>61
お役に立てたのならなによりっす。

でもその内容を聞いた感じだとcollectionかdictionaryを使ったほうがいい気もする。csvがどのくらいの文字数かわからんけど下手するとオーバーフローしそうな気が、、、

あとそもそもファイル操作で読み込むんじゃなくてPowerqueryとかでデータテーブル化してしまえば扱いやすい気も、、、あ、スマンね。いらぬお節介やった。

63 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 18:22:34.02 ID:Av2vQos/0.net]
>>61
そういうのって1次元の配列にCSVから作った2次元配列を足していくジャグ配列だよね
a(b)(c,d)として使いたいってそういう事だよね
CSVから2次元配列に落とす部分は自力で適当に作るしかないと思うよ

64 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 19:42:17.96 ID:3xAEA7yN0.net]
>>52
2次元配列を格納したバリアント型の1次元配列を使えばまあできるんじゃね

65 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 22:05:52.42 ID:sIc7L3oe0.net]
>>62
ジャグ配列はまさにその通りです!
色々調べてみたところ、Workbooks.OpenTextで一度新しいブックを開いて、そこをcurrentregionで二次元配列として取得するのが一番早そうでした
シート一度貼り付けて、そこから取得するのがちょっとかっこ悪い気もしますが、コード的には一番楽のだと思うのでそれでいきたいと思います
ありがとうごさいました!

66 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 22:07:02.46 ID:sIc7L3oe0.net]
>>63
すみません、安価こっちでした
>>62さんも>>64さんもありがとうございました!

67 名前:デフォルトの名無しさん mailto:sage [2023/02/05(日) 06:12:14.98 ID:zxOMW0wY0.net]
>>65

解決の糸口が見つかってよかったです。
シートに貼り付けるのは一見かっこ悪く見えるかもしれませんが、エクセルの場合シート自体が目視できる2次元配列みたいなものなのでデータ用のシートを用意しておくのはデバッグの意味でも有効と思います。
最終的に非表示にしておけばデータを変えて不具合が出たときに参照できますしね。

68 名前:デフォルトの名無しさん (ワッチョイ cf79-p19T) mailto:sage [2023/02/05(日) 17:55:21.75 ID:IrR7f/G90.net]
シートに読み込ませてUsedRange.Valueで二次元配列を取得する場合はインデックスが1オリジンになるとこだけ注意

69 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 13:33:38.06 ID:yPPt1d0+d.net]
名前の定義で範囲に名前をつけると数式で使用できますが、
VBAで自作関数を作り、その引数として定義した名前を使用するとエラーとなってしまいます。
一応定義した名前の後に&“”を付けて文字列化すればエラーを回避できるのですが、毎回これを入力するのは煩わしく見栄えも悪いのでできることならなんとかしたいのですが
解決策ありましたらご教示の程お願いいたします。

70 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 14:59:06.65 ID:oAUh4t2x0.net]
その関数のシグネチャとエラーメッセージぐらいかけよ

71 名前:デフォルトの名無しさん (アウアウウー Sa93-4QSx) [2023/02/08(水) 15:37:35.62 ID:FTgAG7p2a.net]
毎回やるならインターフェース関数作ればいいだけ



72 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 20:18:25.84 ID:GAx9K2n2d.net]
>>69
実現したいことがどんなことなのかわからないけど名前定義した範囲をRange型の変数にsetしてRange型のまま引数として渡しちゃいかんの?

73 名前:デフォルトの名無しさん (スップ Sd5f-dHSc) mailto:sage [2023/02/08(水) 23:15:53.95 ID:Gaz3gRVpd.net]
言葉でうまく説明できないので画像で説明させていただきます。
例えば引数の文字列に別の文字列をくっつけて返すだけのシンプルな関数を作ります。
当然引数にセルを指定すれば問題なく使用できます。
https://i.imgur.com/SnSyEby.png

次に、範囲に名前をつけてそれを引数として使用します。
https://i.imgur.com/6mcu5nn.png

するとこのように「#VALUE!」エラーが出ます。
https://i.imgur.com/9NNr0sB.png

ちなみに範囲の名前に&“”をつければ期待通りの結果になります。
https://i.imgur.com/haXX7gC.png

と、SS撮ってて気づきましたが範囲の中から同じ行のセルを選んで渡す必要があるのですね。
VLOOKUPの第一引数なんかで同じことをすると自動的に同じ行だけを渡せるので勘違いしていました。

74 名前:デフォルトの名無しさん [2023/02/09(木) 07:05:59.22 ID:bJr31kU+0.net]
>>73
検証してないので的外れかもしれないけどたぶんRangeのデフォルト値の問題かと。
うろ覚えだけどvariant型で渡されているからセル単体を引数で渡すとセル内容の値の型(今回はstring型)を渡すけど
複数セルを渡すとrange型のオブジェクトとして渡されてるんじゃないかな。
なので自身で書かれているようにセルを特定してあげないといけないのだと思う。

75 名前:デフォルトの名無しさん mailto:sage [2023/02/09(木) 23:30:18.42 ID:TUokDGw70.net]
>>73
>範囲の名前に&“”をつければ期待通りの結果になります
のがおかしい気がするんだが。実際こっちで検証してもエラーになってる
ちょっと環境書いてみて

76 名前:デフォルトの名無しさん (ワッチョイ fa3d-n4dK) mailto:sage [2023/02/13(月) 03:20:36.33 ID:COtuPGR00.net]
Sub test()
a = 0.2
b = 0.4
If a + b = 0.6 Then
Debug.Print "A"
Else
Debug.Print "B"
End If
End Sub

これってAじゃね?

77 名前:デフォルトの名無しさん [2023/02/13(月) 07:05:23.93 ID:HpzJjAlxd.net]
>>76
Excelでは少数を厳密には表現できないから
0.1と書いても実際の値には0.12...みたいなのが入る
そのズレた値同士の足し算をズレた値と比べるからガタガタで合わなくなる

78 名前:デフォルトの名無しさん [2023/02/13(月) 07:53:01.46 ID:/kiwbSJJ0.net]
>>76
きちんと型宣言すればちゃんと計算できる
詳しくは下を見た方が早い
https://excel-ubara.com/excelvba4/EXCEL_VBA_427.html#:~:text=Single%EF%BC%88%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0%E5%9E%8B%EF%BC%89%E3%81%AF4%E3%83%90%E3%82%A4%E3%83%88,%E7%99%BA%E7%94%9F%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

79 名前:デフォルトの名無しさん [2023/02/13(月) 10:13:40.33 ID:QGUistpWa.net]
>>76
ほんとだよく気付いたね って言ってほしいのか?

80 名前:デフォルトの名無しさん [2023/02/13(月) 10:18:31.40 ID:86tN/4J60.net]
すみません、マクロスレに誘導されてきました。教えてください
【1 OSの種類         .】 Windows**
【2 Excelのバージョン   】 Excel16.0
【3 VBAが使えるか    .】 はい
【4 VBAでの回答の可否】 可
◆やりたいこと
データモデルに値を格納し接続先を作成している
その接続先にあるリストを、検索フォーム、コンボボックスなどのデータソースにしたい
◆補足情報とし調べがついてること
・ピボットテーブルにはビボットテーブル→データモデルからで設定できた
・選択リストもINDIRECT関数で設定できた
・コンボボックスや検索フォームは、RowSourceTypeにテーブルクエリーを設定
・RowSourceプロパティにテーブル名を設定
ここまではわかっていますが、うまく設定ができません

具体的には、下記コードでエラーが出ます
実行時エラー‘13’
型が一致しません

エラーの出たコード
Privets Sub UserForm1 Initialize() {
Me.ComboBox1.RowSourceType = “Table/Query”
Me.ComboBox1.RowSource = “syamei1”
}

上記のコードの書き方、サンプルコードがあれば教えて下さい。よろしくお願いします

81 名前:デフォルトの名無しさん [2023/02/13(月) 10:21:58.10 ID:86tN/4J60.net]
連投すみません
コンボボックスじゃなくても構いません
やりたいことは大量のデータをもとに入力用のポップアップウインドウを作りたいです
レコードが合計で100万以上あり、重たくなるのを避けるために、データモデルの概念を知り、それで入力フォームを作ろうとしています
その方法でコンボボックスを見つけましたが、元となるデータソースがデータモデルの接続先から選べるなら、コンボボックスの形式じゃなくても構いません

入力規則で選択リストの値を持ってくることはできましたが、レコード件数が多いので、フォームで出したいと思っています

よろしくお願いします



82 名前:デフォルトの名無しさん (アウアウウー Sa4f-qaxQ) [2023/02/13(月) 11:40:19.98 ID:GyFZ7uvya.net]
Privets ?

83 名前:デフォルトの名無しさん [2023/02/13(月) 14:18:20.91 ID:86tN/4J60.net]
スマホ手打ちなので誤字は勘弁を

84 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 17:29:24.70 ID:pezzuKY30.net]
スマホで5ちゃん見てる人も多くなったのか

85 名前:デフォルトの名無しさん [2023/02/14(火) 11:37:45.99 ID:nNkhowbBa.net]
拙者も携帯なので試せないでござるよ

86 名前:デフォルトの名無しさん [2023/02/14(火) 13:19:18.08 ID:YTnfnco6a.net]
現場で使えるテクニック満載のVBAの本を教えて下さい。

87 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 22:18:21.54 ID:h0+uN4JM0.net]
見てどうする?
現場に活かせるとは限らんぞ

88 名前:デフォルトの名無しさん (ワッチョイ aff9-UHi0) [2023/02/15(水) 09:38:23.37 ID:dWAC20qI0.net]
syamei1ってテーブルを指定してるようだけど
ちゃんとテーブルが存在してるの?
RowSourceでクエリやsql指定してみたら?

89 名前:デフォルトの名無しさん (ワッチョイ deda-D0vN) mailto:sage [2023/02/15(水) 19:02:02.67 ID:8XlBz3tg0.net]
>>87
活かせる現場に転職するんじゃね

90 名前:デフォルトの名無しさん (ワッチョイ c619-xn9B) [2023/02/15(水) 19:27:38.40 ID:HlAv3bv30.net]
ネットが見れない環境なんかね?
銀行系ではよくある話だけど

91 名前:デフォルトの名無しさん (ワッチョイ 0710-hSWQ) mailto:sage [2023/02/15(水) 19:39:09.60 ID:UoMCmZrt0.net]
絆創膏テクニック的な本はたくさん出ているでしょ



92 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 20:32:13.82 ID:8XlBz3tg0.net]
銀行でお金の計算を初心者が本見ながらEXCELのVBAで作ってるとか
そんな銀行やばくね

93 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 02:33:56.63 ID:v5+0ZrcQ0.net]
ヤバいよそれは。
思い出したけど、どこかの銀行がATMの不具合出した事故を思い出したわ。
それと同じようなトラブルになるのでは?

94 名前:デフォルトの名無しさん [2023/02/16(木) 14:14:15.80 ID:TeVuhO500.net]
Excel 365なんだが
ActiveXのコンボボックスをシートに配置すると
ブックを閉じるときにコンボボックスのChangeイベントが発生して
Changeイベントのコードが実行されるんだが、なんで閉じるときに発生するん?
バグじゃねーの?

95 名前:デフォルトの名無しさん [2023/02/16(木) 17:40:38.79 ID:ImcZX1+Nd.net]
アクティブXコントロールでボタン作ると、ボタン押した時にボタン内の文字が左に寄るのですが、これは治せるのでしょうか?

96 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 17:44:23.49 ID:IvN11mYG0.net]
ActiveXオブジェクトは、自分(Application)のオブジェクトに見えても、実は外部のオブジェクトです
Application イベントの扱いで記述不足や漏れが無いか、プロパティの見直しなどしてみるかコードを貼ってみるなり

97 名前:デフォルトの名無しさん (ワッチョイ 0710-hSWQ) mailto:sage [2023/02/16(木) 20:35:33.62 ID:v5+0ZrcQ0.net]
ActiveXってExcelで使わない方が良いみたいな記事(日経PC)で見た記憶ある

98 名前:デフォルトの名無しさん [2023/02/17(金) 07:12:43.98 ID:WORa0xXL0.net]
ActiveXはExcelシートで使うもんじゃないってのは今でも定石!

99 名前:デフォルトの名無しさん [2023/02/17(金) 10:04:33.80 ID:o2LVTB4Vd.net]
https://answers.microsoft.com/ja-jp/msoffice/forum/all/office-2016-の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c

Excel2016のバグなんですね

100 名前:デフォルトの名無しさん [2023/02/17(金) 10:05:10.85 ID:o2LVTB4Vd.net]
https://answers.microsoft.com/ja-jp/msoffice/forum/all/office-2016-の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c

101 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 10:15:37.69 ID:znCeXLfL0.net]
そんな古いVer使い続けるなよ スタンドアロンで一台こっきりならまだしも



102 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 15:42:35.67 ID:WFsPqw+S0.net]
検索で例えば「あ」という文字をすべて探し出して
その一文字前を選択したいんですがどうすればいいですか?
Selection.Find
 .Text = "あ"
 Selection.Words.First.Previous.Select
としてみましたがうまく行きませんでした
カーソルのある前の文字が選択されます

103 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 16:30:19.83 ID:KwkbTkoud.net]
>>102
複数の選択ができると思ってんのか?

104 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 17:31:12.72 ID:WFsPqw+S0.net]
>>103
できないんですね…VBA触ったの今日が初めてなもので
最終的には"あ"の一文字前だけをフォント変更したいんですがどういう実装ならできそうか分かりませんか?

105 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 20:35:48.06 ID:clT0gqvf0.net]
>>104

自分なら検索して見つかったセル毎に
「あ」が何文字目にあるかを取得し、
その1文字前のフォントを変更するというふうに組む。

106 名前:デフォルトの名無しさん (ワッチョイ 4600-XLfl) mailto:sage [2023/02/17(金) 20:59:53.94 ID:WFsPqw+S0.net]
>>105
ありがとうございます
けど"あ"が複数あるセルも多いので…複数回走査したらループ終わらなくなりますし
"あ"は目印として入れてあるだけで最後にまとめて消すつもりだったんですが
一回フォント変更の処理したらそこの"あ"を消しても

107 名前:、一度検索がいいんでしょうか… []
[ここ壊れてます]

108 名前:デフォルトの名無しさん [2023/02/17(金) 22:23:30.64 ID:v2XGnFXnd.net]
>>106
Mid( Range.value, x)で
セル内のx文字目から後ろを切り出せる
Instr( Mid( Range.value, x), z)で
セル内のx文字目から切り出した中で文字列zが何文字目にくるのか知ることができる
Range.characters(x, y).Fontで
セル内のx文字目からy文字分みたいな一部指定でのフォント変更が出来る

これらのxやyをForで変更しながら処理すればいけると思う

109 名前:デフォルトの名無しさん (ワッチョイ 4600-XLfl) mailto:sage [2023/02/17(金) 22:57:47.99 ID:WFsPqw+S0.net]
>>107
あああなるほどなるほど
仰ってる意味はギリわかるんですけどコードいじるのほぼ10年ぶりとかなんでハードル高い~~~
どうにかがんばってみます……
ありがとうございました

110 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 11:21:39.71 ID:wyxXLbRL0.net]
>>108
コードを書いてみた。
所定のフォントを変えた後、最後にまとめて「あ」を空白に置換させている。

Sub findあ()
 Dim foundcell As Range, firstcell As Range, target As Range, Num As Long, flag As Boolean
 Set foundcell = Cells.find(What:="あ")
 If foundcell Is Nothing Then Exit Sub
  Set firstcell = foundcell:Set target = foundcell
  Do
   Num = InStr(foundcell, "あ")
   If Num > 1 Then
    flag = False
Do
If flag = False Then Num = 0
Num = InStr(Num + 1, foundcell, "あ")
If Num = 0 Then Exit Do
foundcell.Characters(Start:=Num - 1, Length:=1).Font.Name = "BIZ UDゴシック":flag = True
Loop
End If
Set target = Union(target, foundcell)
Set foundcell = Cells.FindNext(foundcell)
Loop Until foundcell.Address = firstcell.Address
target.Replace What:="あ", Replacement:=""
End Sub

111 名前:109 mailto:sage [2023/02/18(土) 11:39:38.68 ID:wyxXLbRL0.net]
途中で書き込んでしまったので
もし使うならインデント調整して下さい



112 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 18:22:51.48 ID:oiEmQBhiM.net]
>>109-110
ご親切にありがとうございます!!
有り難く使わせていただきます

113 名前:デフォルトの名無しさん [2023/02/19(日) 13:44:33.87 ID:E1njzG6f0.net]
次のようにA列にid番号、B列に削除されるid番号あります。
A,B
1,3
2,5
3,7
4,
5,
6,
7,
8,
9,

C列にAからBの番号を除外したものが残ります。
C,
1
2
4
8
9

これを実現するのに、みなさんならセル関数を使いますか?VBAを使いますか?

114 名前:デフォルトの名無しさん [2023/02/19(日) 14:09:46.37 ID:fQjaN3Vg0.net]
バージョンは

115 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 14:50:51.24 ID:E1njzG6f0.net]
ver2019です。

116 名前:デフォルトの名無しさん (ワッチョイ 2342-rjXQ) mailto:sage [2023/02/19(日) 15:46:46.73 ID:IrwBul5G0.net]
手動も含めて一番都合がいいのを使う

117 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 16:33:34.29 ID:E1njzG6f0.net]
ありがとうございます。慣れないですがVBAで行うことにしました。

118 名前:デフォルトの名無しさん [2023/02/19(日) 16:36:15.42 ID:E1njzG6f0.net]
以下の実行が通りません。
If init_id(i) = del_id(j) Then
の個所でインデックスの範囲外というエラーがでました。
配列に対して添字を()しているのが問題でしょうか?

Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant

totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum

init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value

pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1
del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value

Dim i As Integer,

119 名前:j As Integer
For i = 1 To totalQuestions
For j = 1 To pastQuestions
If init_id(i) = del_id(j) Then
Debug.Print init_id(i).Value
End If
Next j
Next i

End Sub
[]
[ここ壊れてます]

120 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 16:40:27.54 ID:E1njzG6f0.net]
念のため、chatGTPはあてにならなかったです。

121 名前:デフォルトの名無しさん (ワッチョイ 4bda-BTrK) mailto:sage [2023/02/19(日) 17:24:19.98 ID:ZehIwlnC0.net]
>>117
Integerだからだろ



122 名前:デフォルトの名無しさん (ワッチョイ 2302-3nnD) mailto:sage [2023/02/19(日) 17:30:57.52 ID:E1njzG6f0.net]
ありがとうございます。Longにしてもダメでした。
根本的に配列の扱いが間違っているような感じですが、
それがよくわかりません。

123 名前:デフォルトの名無しさん (ワッチョイ 1501-rVJW) [2023/02/19(日) 17:39:18.41 ID:j3UrUaev0.net]
>>120
init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value

del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value
でinit_idとdel_idにセルの値を配列として代入しているけど、これは2次元配列として代入している
だからinit_id(i)という一次元配列は存在しない
init_id(1,1)とかinit_id(2,1)の二次元配列として存在している
よってinit_id(i)は存在しませんってエラーが出てる
ローカルウインドで確認するといい

124 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 17:44:28.85 ID:E1njzG6f0.net]
ありがとうございました。よくわかりました。
なんとか1次元の配列を作りたいと思います。
セルデータから簡単に配列つくれるということでこの作り方になったのですが。
列番号を1つにすれば1次になるかと浅はかでした。。

125 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:07:25.25 ID:xzOvW7kvd.net]
配列よりDictionaryの存在チェックで判定する方が簡単そうだけどなぁ

126 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:17:57.66 ID:FtkTxk830.net]
>>112
VBAならこんな感じか。
後、C列に6がないのは記入漏れ?

Sub C列に書く()

Dim i As Long, cnt As Long, dRange As Range
Set dRange = Range("B1:B3")
cnt = 1

For i = 1 To 9
If WorksheetFunction.CountIf(dRange, Cells(i, 1)) = 0 Then
Cells(cnt, 3) = Cells(i, 1)
cnt = cnt + 1
End If
Next i

End Sub

127 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:24:49.89 ID:E1njzG6f0.net]
>>124
ありがとうございます。やろうとしていたコードよりシンプルです。

128 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:28:42.83 ID:E1njzG6f0.net]
>>124でおしえていただいた方法で進めたいのですが。
これで、エラーがでたのはなぜでしょう?
Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant

totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum
pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1

Dim i As Integer
For i = 1 To totalQuestions
init_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i
For i = 1 To pastQuestions
del_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i

End Sub

129 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 20:06:54.10 ID:owAZbnPUd.net]
春休みか?

130 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 20:22:10.83 ID:j3UrUaev0.net]
これ流石に釣りだろ
いつものキチガイ臭がすごいわ

131 名前:デフォルトの名無しさん mailto:sage [2023/02/20(月) 01:12:29.14 ID:CLcJ/prP0.net]
また荒らしか。



132 名前:デフォルトの名無しさん [2023/02/25(土) 22:54:00.85 ID:IaGdb0E30.net]
VBA初心者です
退職済みの前任者が作ったマクロで多発してるエラー対応をしています

Dim 範囲 As Range
Set 範囲 = Worksheets(″Sheet1″).Range(″A1″).CurrentRegion

・変数に日本語を使うメリットとデメリット
・Range型の変数を使うメリットとデメリット
教えてもらえないでしょうか?

133 名前:デフォルトの名無しさん [2023/02/25(土) 23:47:26.72 ID:tG3tii0/d.net]
>>130
お前のレベルで手を出すな






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

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

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