1 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:40:59.22 ID:jnlr9GaR0.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part73 https://mevius.5ch.net/test/read.cgi/tech/1631485799/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
342 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 14:28:18.62 ID:aR5mdzEba.net] タプルのことかな
343 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 16:41:11.70 ID:nmLdRhtud.net] パピコ
344 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 17:43:15.57 ID:jXrjwHyf0.net] VBでワークシート関数が使える事を知らなかった人もいるぐらい
345 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 20:05:33.64 ID:4GEp5Szkd.net] スピル まぢれす
346 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 20:17:38.77 ID:iCzHcVAmd.net] >>342 以前はVBやVCからワークシートオブジェクトを生成してやると、Excelの30日体験版がいつまでも使えてしまうという裏技があったんだよなあ
347 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 23:15:17.45 ID:jXrjwHyf0.net] 凄いバグですな。 Office365を永久に無料試用できる裏ワザあると聞いたのを思い出した。
348 名前:デフォルトの名無しさん [2022/01/12(水) 11:52:41.57 ID:8kyKCDFaM.net] 同じやり方でWin11でIE使えるんだよな
349 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 21:05:19.10 ID:xv5qUCXt0.net] 本当にExcel2021をケーズデンキで買ってきた これで充分な気がする
350 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 21:10:06.51 ID:Bw0ohLlk0.net] フラグを変更することにより外部に個人情報を送信するようになるかも
351 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 23:55:12.07 ID:ORVSIxTU0.net] >>345 永久って何十年でも使えるのか?
352 名前:ワイドショーは見るな mailto:sage [2022/01/13(木) 00:47:58.94 ID:G09zCb3J0.net] ロンドンブーツ田村淳 「嫌なら見なきゃいいじゃん。君らのテレビはチャンネル変えられないの?ネチネチうるさいって言われない? 力つけないと。お前に影響力ないから」 99 岡村隆史 「嫌なら見るなや。何でもツイッターで呟くな!は?ミステリー作家? 知らんわ、お前がミステリーやわ」 ビートたけし 「韓流ばかり放送するたってそれである程度視聴率取るんだからしょうがないよな。いやなら見なきゃいいんじゃねーか」 ダウンタウン 松本 「お前らチャンネル変える能力もないんやな。どんだけ無能やねん(笑)」 やしきたかじん 「(韓流番組が)イヤやったら観んとったらえぇんちゃうの」 マツコ デラックス 「フジテレビのデモは新右翼の集まり」 テリー 伊藤 「高岡さんは精神的にアレですよ」 ミッツ マングローブ 「ネットは仮想敵国を作りたがる。(カメラ目線で)日本人はこういう意見じゃないですから」 江川 紹子 「ふかわの意見は中身がないにゃ」
353 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 01:06:13.81 ID:VkNUzTKE0.net] 韓流番組は知らんけど とりあえずNHKは解体させるべき
354 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 02:22:29.43 ID:Ia/gMc7B0.net] YouTube に、N国の立花孝志の動画が上がっている。1/12 NHKとの裁判で半分勝ちました。 やはり時効5年の最高裁判決は国民にとってありがたい判決でした。 裁判所から、5年以上の支払督促が来ても、1円も払わず、 5年の時効を援用して、8.9万円だけを払う。 1円でも払うと、債務を認めたことになるので、全額を払わなければならないので危険! 8.9万円 × 年間の裁判数700件 = 6,230万円 は、N国が政党助成金から払うので、国民は払わなくて良い やっぱり、N国が最高裁判決で勝ち取った、時効5年の援用が強力!
355 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 02:59:22.55 ID:pqvs3QlS0.net] 次はExcel2024てのが発売されるのかな?
356 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 23:45:10.44 ID:7CyKGRy20.net] VBA極めたら最終的に世界中の有用な情報を集めて自動で収集できるようになりますか?
357 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 00:05:56.70 ID:vO12hrLSa.net] 極めなくてもスクレイピングができれば収集は可能だよ
358 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 00:08:13.34 ID:lOO1pB5h0.net] >>354 SeleniumとSQL覚えたらできるかもな VBAとは言い難くなってしまうが 笑 https://uploda1.ysklog.net/uploda/a21c72780b.jpg
359 名前:デフォルトの名無しさん [2022/01/14(金) 00:20:30.44 ID:dtRMJdwu0.net] vbaでやるのは辞めたほうがいいかなぁ PHPとXPath、各種検索サイトのAPIを勉強するのが最終的にはラク
360 名前:デフォルトの名無しさん [2022/01/14(金) 02:42:54.63 ID:hRpWT3YP0.net] サーバーの負荷になるようなマクロつくったら逆に訴えられる可能性あるよ
361 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 08:06:55.98 ID:ifEdQjoh0.net] https://www.relief.jp/docs/003086.html 初心者です このようなダブルクリックで色をつけたり消したりするコードについての質問です。 同じファイルのAシートとBシートでそれぞれ使っているのですがBシートでダブルクリックすると一瞬読み込みマークが出てテンポが悪くなります。AシートとBシートに特に差異はなくてBシートに画像が一枚あるだけなのですがそんな変わるものでしょうか
362 名前:デフォルトの名無しさん [2022/01/14(金) 10:47:59.53 ID:dtRMJdwu0.net] >>.359 普通は変わらん 条件つき書式か何かが隠れてると思うけど、ファイルを見てみないと分からない
363 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 11:11:05.48 ID:HvyHPCt90.net] Is Nothing の判断で戸惑ってるか、Sheet を特定すれば直るのか 画像外してテストしてみりゃいいだけ
364 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 12:08:46.60 ID:lOO1pB5h0.net] >>359 やってみましたけど再現しないので解らないです(Ver16) 今の状況で出来ることというとまず>>361 を試す 直らないなら「If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub」と「 End If」を抜いて試す 直らないなら Cancel = Trueを抜く 直らないなら 全部抜いてCells(1, 1) = "a"とかを入れてみる 他はシート1を消して試してみる、シート3を作ってどうなるか試してみるなどで遅延の原因を探っていくしかない気がします
365 名前:デフォルトの名無しさん [2022/01/14(金) 12:47:39.88 ID:dtRMJdwu0.net] >>362 ちょっと違う どこで時間がかかっているかを見るなら、 Debug.Print Now() & "if前" Debug.Print Now() & "最後" みたいなものを随所に差し込んでコンソールで確認する 一番いいのは新しくシート作ってそこに画像だけ持っていって試す。 時間がかからないならそのシートを使い続ければ良い。原因なんて考えても仕方ない。大体どこか見えない所にゴミデータがあるだけだ
366 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 13:23:22.68 ID:0uAreaIs0.net] ありがとうございます いずれ他の言語やソフトウェアも勉強することを視野に入れてVBAはじめてみます
367 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:53:37.34 ID:cSomMf3f0.net] Function testfunc01(word) As Integer Dim serchChar As String
368 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:55:30.70 ID:cSomMf3f0.net] £は英国の通貨記号ポンドです. セルA1に"10£"を入れ,B1にA1の文字列内の£の位置を示す関数testfunc01(A1)(後述)を入力しました.正しい値は3ですが,何故か0を返します. セルA2に"10L"を入れ,B2にA2の文字列内のLの位置を示す関数testfunc02(A2)(後述)を入力しました.正しい値3を返します. 通貨記号が問題かと思い,今度はプロシジャーtest(後述)内で変数 word = "10£"を定義しtest内でtestfunc01(word)を実行すると正しく3を返しました. ”引数がセル参照かつ通貨記号”という組み合わせの場合にtestfunc01内で使用している組み込み関数instrが正しく機能しないようです.解決策をありますでしょうか? 他にtestfunc01に関して以下の条件で試しました. セルA3に"10あ"を入れ,B1にA1の文字列内のあの位置を示す関数testfunc03(A3)を入力すると正しく3を返す.”引数がセル参照かつ全角文字”が原因ではない. testfunc01(word)をtestfunc01(ByVal word as string)に修正する→改善せず,間違った0を返す.
369 名前:デフォルトの名無しさん [2022/01/14(金) 14:55:37.21 ID:dtRMJdwu0.net] wordなのにintやめろ
370 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:55:50.74 ID:cSomMf3f0.net] Function testfunc01(word) As Integer Dim serchChar As String serchChar = "£" testfunc01 = InStr(word, serchChar) End Function Function testfunc02(word) As Integer Dim serchChar As String serchChar = "L" testfunc02 = InStr(word, serchChar) End Function Function testfunc03(word) As Integer Dim serchChar As String serchChar = "あ" testfunc03 = InStr(word, serchChar) End Function
371 名前:デフォルトの名無しさん [2022/01/14(金) 14:56:14.35 ID:dtRMJdwu0.net] すまん、連投なのね ちょっとテストしてみる
372 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:56:24.45 ID:cSomMf3f0.net] sub test() Dim word, serchChar As String serchChar = "£" word = "10£" Debug.Print testfunc01(word) End Sub 結果 A B C 1 10£ 0 ←testfunc01の結果 2 10L 3 ←testfunc02の結果 3 10あ 3 ←testfunc03の結果 testの実行結果 3 3 3
373 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:56:53.00 ID:cSomMf3f0.net] タブが解除されて見にくいです.すんません.
374 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 14:59:25.39 ID:cSomMf3f0.net] 最後は間違っておりいかが正しい結果です. testの実行結果 3
375 名前:デフォルトの名無しさん [2022/01/14(金) 15:01:52.05 ID:dtRMJdwu0.net] >>365 ,366,368,370 https://i.imgur.com/ZrKrhy8.png >セルA1に"10£"を入れ,B1にA1の文字列内の£の位置を示す関数testfunc01(A1)(後述)を入力しました.正しい値は3ですが,何故か0を返します. 俺の環境では3が返ってきた A1がおかしい気がする =CODE(MID(A1,3,1)) で「8562」が返ってくれば、ポンドの文字は間違い無いと思う もし8562以外だと、別の文字が入っている気がする
376 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 15:02:23.56 ID:P/5qDoLq0.net] ポンド記号が書式で出てるんじゃないかと予想 セルの値をどうやって取得してチェック関数に渡してるんだ?
377 名前:デフォルトの名無しさん [2022/01/14(金) 15:03:43.93 ID:dtRMJdwu0.net] >>374 あぁほぼ間違いなくそれだ
378 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 16:01:27.94 ID:cSomMf3f0.net] >>373 >>374 「ポンド記号が書式で出てる」ということはありません. 10£はサンプルとして簡単にしただけで,実際には10£5s9d(10ポンド5シリング9ペンス)をペンスに換算するプロセスで直面した問題です. 原因は通貨記号の半角と全角の問題であることがわかりましたが解決策がわかりません. A1の£のコードは63でした. 一方,testfunc01内の£をエクセルにコピペしてcode関数で値を取得すると8562でした. A1の£をVBAのプロシージャ内にコピペすると?になります. エクセルの通貨記号は£,VBAのプロシージャ内の通貨記号をコピペしたものは£で,サイズが異なるので半角と全角の違いだと思います. 通貨記号を入力する時はエクセルでもVBAプロシジャーでも”ポンド”と打ち込でで変換しますが半角一択です(googleのIMEを使用). VBAのプロシージャ内で半角(コード番号63)が何故全角(コード番号8562)に自動的に変換されるのかわかりません. エクセルの£をVBAのプロシジャーにコピペしても?になるので,半角の£をプロシジャー内で使う方法が見つかりません. 逆にエクセルで10£と打ち込んだ後半角の£を全角の£に置換するとうまくいきました.しかし毎回置換するのは面倒です. 結局,通貨記号の入力時に半角と全角が選択できるか,VBAで内で自動的に全角に変換されないようにできればば問題は解決するのですが. MSIMEに切り替えると、ポンドの候補として、£(全角)と£(環境依存)がでてきました。エクセルではとちらでも選べますが、VBA内では環境依存を選んでも強制的に全角に変換されます。 VBAの環境設定の問題でしょうか? 最悪の場合は、エクセルサイドで半角を全角に置換するマクロで解決する方法がありますが、できれば入力時に半角と全角で意図したほうを入力できるという解決策がいいです。 うまい解決策はないでしょうか?
379 名前:デフォルトの名無しさん [2022/01/14(金) 16:45:24.64 ID:dtRMJdwu0.net] >>376 半角ポンドとエルは同じ文字コードなのかな。スラッシュと円マークみたいなもんかね こういう場合は、検索する側、される側を両方半角小文字に揃えれば良い Function testfunc01(word) As Integer Dim serchChar As String serchChar = "£" testfunc01 = InStr(StrConv(word, 10), StrConv(serchChar, 10)) End Function
380 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 17:12:55.74 ID:P/5qDoLq0.net] VBE内ではたしかSHIFT_JISしか使えんかった気がするな 文字リテラルで書くのやめて、CHRWとか使えばいいんじゃね Strconvで行けるかなぁ そもそも半角ポンド記号とかいう想定がない気がする
381 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 17:20:31.63 ID:HvyHPCt90.net] 別角度からのほほんと見てるけど、> 10£5s9d(10ポンド5シリング9ペンス) という元データがあるんだろうか? イギリスはポンドとペンスが通貨単位でシリングというのは1971年以前の単位だと出てくるんだが で、1ポンド = 100ペンス 10£5s9d というテキストで渡されるから変換したいんで£の位置を知りたい は判るが そこで躓いて先に進まないと成れば、事前に£を他の文字に変換してからExceに入れてはどうか すでに目を通しているとは思うが 通貨定数について https://docs.microsoft.com/ja-jp/office/client-developer/visio/about-currency-constants EUROCONVERT 関数 https://support.microsoft.com/ja-jp/office/euroconvert-%E9%96%A2%E6%95%B0-79c8fd67-c665-450c-bb6c-15fc92f8345c MSに問い合わせる案件のような気もする
382 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 17:28:00.48 ID:2Gg8wBAvd.net] >>376 ポンド記号は3種類ある JISコード(Shift-JISコード)、ユニコード、イギリス向けOSの環境依存文字 使用者にどれかを強制させて統一させるのはものすごく難しいので、どれが入ってきても混じっててもいいように、 プログラムを複数のパターンに対応できるように作るしかない
383 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 17:34:13.27 ID:dcyjCeKBa.net] 勝手に変換すればいいよ
384 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 17:59:37.72 ID:cSomMf3f0.net] >>379 まさしき1971年以前の英国貨幣史の研究で使用します.10世紀くらいから第2次大戦くらいまでです.各時代の銀貨が含む銀重量と,地金価格,銀貨の額面価値の比較をするためのデータ整備でしようします, 1971年以前は,1£=20シリング,1シリング=12ペンスでした.10進法ではありません. 今は応急策としてエクセル側で£ではなくてLと使いVBAで側ではてtestfunc02タイプでしのいでいますが. しかし将来見た時になんでこうしているのかわからなくなると思いますし,£の使い方は要注意ということも間違いなく忘れますので,この際できれば解決しておきたいのです. >>377 半角ポンドのコードは63番でL大文字は76,l小文字108番で異なります. ¥とバックスラッシュはともに92番ですが事情が異なるようです. またご提案の StrConv("£", 10)を試しましたが,結果は全角の"£"を返し半角の"£"を返さないので解決策ではないです. >>378 半角ポンド記号は存在します. £,£は違います. 最初が半角ポンド記号で2番めが全角ポンド記号です.
385 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 18:03:34.25 ID:cSomMf3f0.net] 自己レスです. 今が気がついたのですが,レス入力時には半角ポンドと全角ポンドは違うのですが,投稿後はどちらも全角ポンドで表示されていますね. ”£,£は違います.”のように. このことが,今ひとつ皆様に正しく伝わりにくい原因かもしれません.
386 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 18:10:11.49 ID:cSomMf3f0.net] 半角と全角の違いをアップしました. https://imgur.com/QmAApZ5 レス作成時には半角と全角の異なるもじが使えますが,投稿後はともに全角で表示されるようです.
387 名前:デフォルトの名無しさん [2022/01/14(金) 18:12:16.77 ID:dtRMJdwu0.net] >>383 今ちょうど見ていた ポンド記号、何か色々とおかしい vbeでも変換されるからわけわからんことになってきた
388 名前:デフォルトの名無しさん [2022/01/14(金) 18:26:28.87 ID:dtRMJdwu0.net] >>382 俺のコードで合っている https://i.imgur.com/XISUJtg.png 恐らくコンソールで見たんだと思うけど、VBE上はポンドが全て全角になる ポンドを文字列にせず、全て半角にして取り扱えば問題は起きにくいと思う serchCharの部分も文字コードの方が良いだろう あと、Lが引っかかる理由もわからんが、恐らくあいまい検索か何かでひっかかってるのだろう 業務に使うなら、今回に限ってはvba使わずに、エクセルだけで処理したほうが良い気がする。
389 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 18:29:18.19 ID:P/5qDoLq0.net] >>382 存在するかどうかって言ってるんじゃなくて、SHIFT_JIS環境で想定がないんじゃないかって言ってるんだよ ウィキでみるかぎり、U+00A3とU+FFE1らしいから、それチェックすればいいだろ こんな感じか Function foundPound(word As String) As Long Dim pos As Long pos = 0 Do Until pos >= Len(word) pos = pos + 1 If Mid(word, pos, 1) = ChrW(&HA3) Or Mid(word, pos, 1) = ChrW(&HFFE1) Then foundPound = pos Exit Function End If Loop End Function
390 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 18:44:27.31 ID:cSomMf3f0.net] >>386 >>387 皆様ありがとうございます。 一つ一つ確認してみます。 386様、コードを張っていただけると助かります。
391 名前:デフォルトの名無しさん [2022/01/14(金) 19:11:03.04 ID:dtRMJdwu0.net] >>388 >>377 で合っている テストに使ったコードはこれ ユーザー定義関数じゃなく、普通の関数にしてる https://jsfiddle.net/jb52o9g4/
392 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 19:15:48.47 ID:lOO1pB5h0.net] serchChar = ChrW(163)で行けたが
393 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 19:26:56.18 ID:lOO1pB5h0.net] >>389 あ、解決してたんだね、ごめんなさい 焦
394 名前:デフォルトの名無しさん [2022/01/14(金) 21:30:18.78 ID:+nyDUFlg0.net] searchCharな
395 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 21:47:12.20 ID:cSomMf3f0.net] >>377 ありがとうございました。 動作確認できました。 一つ教えて下さい。 StrConvの第2引数ですが10はどういう意味でしょうか。 公式ヘルプには10の設定がないのでご教示いただければありがたいです。 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/strconv-function?f1url=%3FappId%3DDev11IDEF1%26l%3Dja-JP%26k%3Dk(vblr6.chm1011063);k(TargetFrameworkMoniker-Office.Version%3Dv15)%26rd%3Dtrue
396 名前:デフォルトの名無しさん [2022/01/14(金) 21:51:25.41 ID:dtRMJdwu0.net] >>393 一つならvbLowerCaseかvbNarrow(もしくは2か8)でいいんだけど、 2つ以上組み合わせる場合は、足し算する 小文字の変換 2 半角 8 足して10 今回は小文字にする必要は理屈上ないはずけど、 どうせやるならついでにやっておいたほうが良いからやってある
397 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 22:29:34.99 ID:cSomMf3f0.net] >>394 ありがとうございました。引数の意味はVBA でよくやる方法ですね。
398 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 22:43:41.66 ID:cSomMf3f0.net] >>394 すいません。 対応する小文字や半角文字がなければそのまま大文字や全角文字を返すのでしょうか?
399 名前:デフォルトの名無しさん [2022/01/15(土) 00:25:26.50 ID:w/VctcoP0.net] >>396 そうだと思って使っていたけど、言われてみればリファレンスにないね あと、ごくたまに罠がある https://www.petitmonte.com/bbs/answers?question_id=28308
400 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 00:56:09.86 ID:xF8zc0t/0.net] んー、セルはunicode対応で環境依存文字使えるけどエディタはsjisだから文字コード自体が違うだけかと思ってた
401 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:08:19.24 ID:8e4JI6z40.net] >>397 詳しい説明ありがとうございました。とても複雑なんですね。
402 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 11:15:34.39 ID:6domvLfM0.net] Range.Rangeプロパティ、イミディエイトウインドウ、ローカルウインドウ 便利
403 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 12:40:23.72 ID:8e4JI6z40.net] >>387 文字コードについて詳しくないので教えて下さい。 ChrW(163)をセルに書き込むとポンドの半角通貨記号でした。 そのセルのcode()を見ると63でした。 2つの値が異なるのは163がユニコードの番号で63がANSIの番号だからですか? どちらか一方だけ(例えばユニコード)に対応した関数で使用を統一する方法はあるのでしょうか。
404 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 13:37:09.72 ID:Op2FQMu7M.net] >>401 状況よくわからんけど AscW(Cells(1,1).Value) とかじゃ駄目なの?
405 名前:デフォルトの名無しさん [2022/01/15(土) 13:37:27.88 ID:w/VctcoP0.net] >>40 1 違う code()の返り値が63は、2パターンある 一つは半角「?」。これは正真正銘の63 もう一つはshiftjisでもasciiでもない文字。絵文字など。それも63が返って来る 後者は出力の際に、ユーザーに対する応答として便宜上「?」を使っているだけだろう。 >>387 の言ってる>SHIFT_JIS環境で想定がないんじゃないかって これはそういう意味だと思う。多分 文字コードは難解な上に歴史的経緯が大きく影響から、あんまり深追いしないほうがいいよ。得るものも少ない。 ダメ文字知ってるぐらいで良い
406 名前:デフォルトの名無しさん [2022/01/15(土) 13:38:25.50 ID:w/VctcoP0.net] それを考えると、変な文字でワークシートとvbaを行ったり来たりさせないほうが良いと思う ってことぐらい注意しておけばいいんじゃないかな
407 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 17:07:04.41 ID:m8G7GxvMM.net] クラスモジュール初めて使うんですが、 ひとつのクラスモジュールに、 マクロで
408 名前:使用するWsをまとめたクラスを作りたいんですが、 入力用Ws Ws1_入力用 Ws2_入力用 一時計算用Ws Ws1_一時計算用 Ws2_一時計算用 みたいに作ることはできるんですか? 入力用Ws(一時計算用Ws)まで入力して、ドットを打つと インテリセンスでそれぞれのWsが選べるようになる・・・という構造をにしたいのですが。 例えば、標準モジュールから呼び出すときに Dim ClassWs As ClassWs: Set ClassWs = New ClassWs ClassWs.入力用Ws.Ws1_入力用 ClassWs.一時計算用Ws.Ws1_一時計算用 のような感じです。 できた場合でも、あまりこういった書き方はしないほうがよいですか? [] [ここ壊れてます]
409 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 18:42:53.07 ID:XFuYRO140.net] >>401 まず、文字コードって言われているものには複数の種類があって、同じ文字であっても違う番号で表されることがある。 そして、文字コードを規定している体系によって、持っている文字の種類や数が決まってる。 これが文字コードの大前提 今回の問題は、Windows日本語版のANSIでは半角ポンド記号は定義されていないってこと >2つの値が異なるのは163がユニコードの番号で63がANSIの番号だからですか? ChrWはUnicodeを扱う関数 codeワークシート関数はANSIを扱う関数 同じ文字でも数値が違うのは当たり前 unicodeワークシート関数使えば当然同じ数値になる ただしANSIでの63ってのは"?"文字のコード codeワークシート関数の数値については、対応する文字がない場合は?のように扱うんじゃないかな なので?の数値が帰ってきてると思われ >どちらか一方だけ(例えばユニコード)に対応した関数で使用を統一する方法はあるのでしょうか。 ANSIで使えない文字がある以上、ユニコードでやるしかない
410 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 18:52:54.92 ID:XFuYRO140.net] >>405 Wsってなんだ? そもそもの目的はなんだ? 一つのクラスに機能を集約するのはまあよくある 機能ごとにクラスやモジュールを分けるのもよくある 規模とか再利用性とかとの兼ね合い
411 名前:デフォルトの名無しさん [2022/01/15(土) 19:00:32.98 ID:w/VctcoP0.net] >>405 名称が完全に二重になっているし、入力がめんどくさくなってるだけでは? クラスはMeを使わないならあんまり使う意味は無いと思う。 事務の補助程度なら、その場面はほぼ無いと思う。ってか、vbaでクラス使った事ない。 ワークシートに別名を持たせてインテリセンスで使いたいだけなら、 関数+グローバル変数にして最初の一行で呼び出しきってしまえば良いと思う https://i.imgur.com/2w8bUT8.png ワークシートなら死ぬほど使うから、グローバル変数でも問題ない
412 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 19:19:41.65 ID:m8G7GxvMM.net] >>407 >>408 ありがとうございます。 おっしゃる通り、今まで事務の補助程度で自分用としてしか使ったことなかったのですが、 今回初めて配布用のマクロを作っていて、膨大にモジュールが増えてしまい混乱していました。 クラスモジュールなら解決できるのかなと思いまして・・・ 画像付きで解説までいただき、助かりました。
413 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 19:37:36.41 ID:UMPZ1rN80.net] >>405 VBAではひとつのクラスはひとモジュールで書く制約があるからそのような記載は無理。 ただ、入力用と一時計算用のクラスを別に作ってWSクラスとやらの中で生成してそれをPublicのプロパティや変数にしまっておけば入れ子としての設定や読み取りは可能。 クラスを使用する前にそもそもクラスとはどういうものであってどういうときに使うと便利なのかを理解した方がいい。
414 名前:デフォルトの名無しさん [2022/01/15(土) 20:07:58.86 ID:FEpdyYa5a.net] >>409 混乱をふやしてどうする
415 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 00:51:21.02 ID:rwDbh7Xz0.net] >>405 やっと理解したわ 入力用Wsと一時入力用Wsでインテリセンスを分けなくてもいいなら簡単にできる コンストラクタでワークシートをセットするだけでいい
416 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 01:16:49.54 ID:9svQYmXf0.net] >>406 詳しい説明ありがとうございました。 一つわからないことがあります。 > 今回の問題は、Windows日本語版のANSIでは半角ポンド記号は定義されていないってこと とのことですが、そうしますと377さんの serchChar = "£" testfunc01 = InStr(StrConv(word, 10), StrConv(serchChar, 10)) のStrConv(serchChar, 10)によって全角のポンドの通貨記号は何に変換されるのですか?
417 名前:デフォルトの名無しさん [2022/01/16(日) 01:18:43.61 ID:JxOh46GE0.net] VBA・・・コンストラクタ・・・
418 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 06:52:16.37 ID:rwDbh7Xz0.net] >>414 あるの知らんの?
419 名前:デフォルトの名無しさん [2022/01/16(日) 09:31:02.87 ID:JxOh46GE0.net] >>415 間違えてた、すまん コンストラクタ自体はあるのね、無いと勘違いしてた 確かにこのケースなら使える
420 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 13:56:03.36 ID:UA4PX5Jc0.net] OSのVer. やExcelのVer. 更には文字コードの変遷に依っては近い将来ですら読み取れなくなって「?」でしか 表されなくなるかも知れないものを、将来の資料として保存するためにExcelで残そう という企てが不可解 例えhtmlで保存するとしても文字コードの軛からは逃れられない 保存時にPDFにするのかも知らんけど テキストデータとして〇£〇シリング〇ペンス(ペニー) の資料が豊富にあって、それぞれから数値だけ抜き出したい という要望だと信じていたが、そんなデータが遺されているのだろうか? シリング時代はPCすら無い時代 紙の資料がごまんと出てきた それをデジタル化してる とかなのだろうか 時代による金の含有量の変遷を遺したい とか書いていたが、ニッチな知的好奇心を満たそうとする人は 細かい事にも拘り続けるんだな、と 文末脚注に Lはポンドの意味 のひと言で済むのに シリングだって記号s ペンスは記号pだろうに 例えば沈没船の積み荷の目録が出てきた そこには〇£〇シリング〇ペンスの記載がずらずら これ引き揚げて通貨を溶解して金にしたらインゴット〇〇本分の量だぞ! 金の総重量をExcelで集計しろ! とかいう要望ならまだ判るんだが
421 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:34:44.43 ID:9svQYmXf0.net] >>417 > テキストデータとして〇£〇シリング〇ペンス(ペニー) の資料が豊富にあって、それぞれから数値だけ抜き出したい > という要望だと信じていたが、そんなデータが遺されているのだろうか? シリング時代はPCすら無い時代 > 紙の資料がごまんと出てきた それをデジタル化してる とかなのだろうか 「ポンド・スターリング―イギリス貨幣史 (1984年)」を読んでいる。計数上の特性を正確に理解しないと内容を追えないから。 > 文末脚注に Lはポンドの意味 のひと言で済むのに シリングだって記号s ペンスは記号pだろうに ペンスの記号はdね。pでなくてdなのは歴史的な経緯がある。 正しく記述しておけば後から苦労しない。 それにコードとして本来期待した動きをしない時に疑問を持つのは当然。 その結果、文字コードが原因ということ、および解決法も判明した。 今後の欲に立つ。 原因不明のまま安直にLで凌ぐのは、一時対応を除いて、よくない。
422 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:54:09.16 ID:EoUder1l0.net] >>405 です。 >>410 >>412 ありがとうございます。クラス全然理解できていなくてすみません。 メンバ変数 Public ws1 As Worksheet Public ws2 As Worksheet にして、コンストラクタで Private Sub Class_Initialize() Set ws1 = Sheet1 Set ws2 = Sheet2 End Sub を読み込ませる、という認識であってますか? 以下のように、ゲッターで各wsのプロパティを作っていくのはやめたほうがいいでしょうか。 Property Get ws1() As Worksheet Set ws1 = Sheet1 End Property Property Get ws2() As Worksheet Set ws2 = Sheet2 End Property
423 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 15:26:39.86 ID:0L8LiCPu0.net] Windows 10, Excel 2019 hyperlink関数を使ったリンクからブラウザを起動する時に 特定のURLのみ応答が60秒ほど遅い クリック後すぐにEscを押すと60秒ほどの待ち時間が無くなりすんなり接続できます 遅い = hyperlink("https://www.yodobashi.com/", "yodo") 遅くない = hyperlink("https://www.アマゾン.co.jp/", "ama") ちなみにExcelを介さずアクセスするとすんなり表示されます 他に60秒ほどの待ち時間を無くす方法があれば教えて下さい
424 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 15:44:15.55 ID:y1CvsdF30.net] >>413 それぐらい自分で試せよ U+FFE1の半角ポンド記号になるっぽい 普通に正しい動作だな
425 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:10:07.63 ID:9svQYmXf0.net] >>421 そういう意味の質問じゃなくって、「Windows日本語版のANSIでは半角ポンド記号は定義されていない」と書いていたので、StrConv(serchChar, 10)では半角ポンド記号に変換できないのじゃないかと思ったわけです。でも正しく処理しているんで、VBA 上では表示はできないけど計算処理はできるということですかね。
426 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:12:28.73 ID:y1CvsdF30.net] >>419 クラスもモジュールの一つなんだが まず処理の内容とモジュールの役割分担を考え直せ インテリセンスに出したいからとか、本末転倒だ インテリセンスに出したいだけなら、>>405 の例ならクラス三つつくって ClassWsクラスに Public Property Get 入力用Ws() As 入力用Ws Public Property Get 一時計算用Ws() As 一時計算用Ws 入力用Wsクラスに Public Property Get Ws1_入力用() As Worksheet Public Property Get Ws2_入力用() As Worksheet 一時計算用Wsクラスに Public Property Get Ws1_一時計算用() As Worksheet Public Property Get Ws2_一時計算用() As Worksheet をそれぞれ定義すればできる 中身は自分で考えろ
427 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:19:51.33 ID:y1CvsdF30.net] >>422 VBAの内部文字コードはユニコード ユニコード表示できないのはVBEと言われている、VBAのエディター なのでVBAでユニコードの処理はできる。VBEで文字を直接入力できない(ものがある)だけ だから>>378 でCHRW使えって書いてる
428 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:33:04.70 ID:9svQYmXf0.net] >>424 よくわかりました。ありがとうございました。
429 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 19:01:50.46 ID:EoUder1l0.net] >>423 ありがとうございます。 もう一度、役割分担を考えてみます。
430 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 19:41:57.72 ID:rwDbh7Xz0.net] まあたしかにインテリセンス出したいだけならオブジェクト名を変更するだけでもいいかもしれんな
431 名前:デフォルトの名無しさん [2022/01/16(日) 20:05:03.64 ID:xYtP7RFCa.net] 次の担当になる人がかわいそうだな
432 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:18:31.11 ID:RSDKT1580.net] >>362 コードは他のシートと同じだったので省きます。 画像は消しても変わりませんでした。コードを消してもセルをクリックしたときにたまに読み込みが入るので何かが動いてそうなのですがどこ見ればいいでしょうか…。
433 名前:デフォルトの名無しさん [2022/01/16(日) 20:31:17.59 ID:JxOh46GE0.net] >>426
434 名前:デフォルトの名無しさん [2022/01/16(日) 20:31:53.39 ID:JxOh46GE0.net] >>426 色々聞いてみるといいかもね 恐らくインテリセンスも、みんな使わない
435 名前:デフォルトの名無しさん [2022/01/16(日) 20:35:43.37 ID:JxOh46GE0.net] >>429 >>363 の通り、どこで時間が書かているかを突き止める必要がある
436 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:53:15.31 ID:RSDKT1580.net] >>432 初心者なのでDebug式をどこに代入すればいいかわからないので教えてください。 https://i.imgur.com/dzwx5GC.jpg (コード書くと改行多すぎで弾かれます)
437 名前:デフォルトの名無しさん [2022/01/16(日) 21:09:10.46 ID:KEj0DMHt0.net] >>433 >>2 を読め
438 名前:デフォルトの名無しさん [2022/01/16(日) 21:13:53.65 ID:JxOh46GE0.net] >>433 >>434 は頭おかしい ちょっと待て
439 名前:デフォルトの名無しさん [2022/01/16(日) 21:14:52.42 ID:JxOh46GE0.net] っって思ったけどせめてデータで出せ メモ帳にコピペしてdotupとかそのへん
440 名前:デフォルトの名無しさん [2022/01/16(日) 21:22:18.03 ID:lhZQvquHM.net] 馬鹿を相手にすんな
441 名前:デフォルトの名無しさん [2022/01/16(日) 21:26:17.91 ID:JxOh46GE0.net] >>437 専門板にいると、自分が万能な気になる そうじゃないんだよ みんな、一長一短なんだ
442 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:33:39.20 ID:uTGjF8kU0.net] >中身は自分で考えろ おー!!カッコいいねー!! 熱血トレーナーみたいだね〜