Excel VBA 質問スレ Part81

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2024/04/18(木) 14:03:38.03ID:cMr18rZu
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

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

関連スレ
Excel VBA 質問スレ Part79(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1674875532/

※前スレ
Excel VBA 質問スレ Part79
https://mevius.5ch.net/test/read.cgi/tech/1674874007/
Excel VBA 質問スレ Part80
https://mevius.5ch.net/test/read.cgi/tech/1685489018/
2024/11/21(木) 08:47:19.49ID:fb+5RzBl
>>806
イキってるのは自分でしょ
VBEって何だ?って話からの話題なのに、
ファイルメニューのアカウント見たって載ってるわきゃない
Excelのバージョン調べたいわけじゃないんだから
ちなみにVBEのバージョン情報見たってVBAが何の略か分かるだけだから、
上で普段、何を見ているのか?って言ってる奴自身が見てないってオチね
2024/11/21(木) 13:44:11.90ID:dI+zU/Ku
知ったかぶりの集まりは相変わらずw
2024/11/23(土) 17:25:59.94ID:x22pe3dj
弥生会計にCSV形式に変換したExcelファイルを取り込んでるんだけど、勘定科目の部門や補助科目も自動で入れる方法ない?

vlookupみたいにある程度上限作って絞り込むしかないんかな?
2024/11/23(土) 19:31:25.56ID:RDDdR5zb
下のエクセルファイルを加工すれば良いんじゃないの
弥生会計はどんな仕組みなの
811デフォルトの名無しさん
垢版 |
2024/11/23(土) 19:45:11.34ID:QWFqg7JC
>>809
それはExcelの話ではなく、弥生会計の話だろ?
812デフォルトの名無しさん
垢版 |
2024/11/23(土) 19:45:47.64ID:QWFqg7JC
>>809
CSVファイルはExcel形式のファイルではありません
2024/11/23(土) 20:35:55.83ID:2U4g39QH
.csvをExcelに関連付けするMSが諸悪の根源
2024/11/23(土) 20:38:41.63ID:mQ6rY1nl
まあエクセルで開くことのが多いから関連付けてくれてるほうが楽ではあるが
2024/11/23(土) 21:05:41.16ID:x22pe3dj
>>810>>811
弥生会計側の設定じゃないのよ
勘定科目、補助科目、部門の順にセル毎に並んでるんだけど、Excelファイルを送ってくる人達が会計ソフト詳しくなくて、補助科目と部門はそもそもExcelファイルに入力する欄がない
そのファイルをCSVに変換して、弥生会計に取り込む前に俺が補助科目と部門を手入力してから取り込んでる
上手いことマクロ組んで勘定科目と適用欄の文字列で条件指定して補助科目入れたいんだが難しいかなあ

例えば勘定科目・車両費
   補助科目・駐車場代・ガソリン代・通行料
みたいな分かれ方してるときに、適用欄に〇〇駐車場代って書いてたら補助科目に駐車場代って入るようにしたいんだが、勘定科目ごとに補助科目と部門山ほどあるし無謀か?
2024/11/23(土) 21:14:04.68ID:RDDdR5zb
送られてくるエクセルの値から補助科目と部門を導ける法則性があるなら可能だけど
817デフォルトの名無しさん
垢版 |
2024/11/23(土) 21:22:18.33ID:QWFqg7JC
>>815
結局、弥生会計の仕様に合わせたいと自分で説明しているけど?

まずはExcelファイルのフォーマットに項目を追加して、それを使わせるのが業務の変更方法だ。

自分でやろうとしても損をするだけ。
2024/11/23(土) 22:01:59.28ID:x22pe3dj
>>816>>817
法則性ないんだよなあ…
やっぱExcel側を触るしかないのか
言ってしまうと各支店の小口現金のExcelファイルなんだが、そもそも小口現金って仕組みを廃止する方向のほうが早そうだな
819デフォルトの名無しさん
垢版 |
2024/11/23(土) 22:20:50.58ID:QWFqg7JC
適当に入力していても、勝手に直してくれるから大丈夫だと思われているかもな。
2024/11/23(土) 23:48:31.47ID:yiMUAmCc
経理の事はよく分からんが、法則性のないものを手続き型プログラミングでどうにかするのは難しいよ。
その適用欄は備考欄みたいな自然言語の記入だよね? 限られたよくあるパターンだけ正規表現とかで拾うだけならできるだろうけど。
でも今ならAIのAPIを使えばなんとかなるかも?
2024/11/24(日) 00:03:40.99ID:3rEoBJGn
書き忘れたけどAIのAPI使う時は会社で機密保持契約とかしたものだけ使ってね。
一般の無料AIとか、有料だけど単なる従量制のやつは情報漏洩扱いになる可能性あるから注意ね
2024/11/24(日) 00:55:47.56ID:uHX0nAvq
>>821
ありがとうございます
確かにそうですね‥APIは控えておこうと思います
823デフォルトの名無しさん
垢版 |
2024/11/24(日) 01:20:37.42ID:5abmj+os
自作自演なのか?
Excel VBAもわからない人間が生成AIを使えるわけがない
2024/11/24(日) 07:59:53.28ID:ZLDzIIjA
恐怖のSEX上納システムってVBAで作れますか?
2024/11/24(日) 09:23:40.67ID:vxmTfPYM
>>819
まさにそう
分からない箇所は勘定科目すら空白でこっちで直してる
>>820
備考欄って書いたほうがよかったね
〇〇さん 〇〇町 タイムズ駐車場代
みたいに手入力で書いてくれてるから、支店ごとに入力内容違うし表記揺れも多い
2024/11/24(日) 13:15:46.77ID:gX6sLx6s
事務屋とシステム屋の溝は深いなと、毎度絶望的な気持ちになるよ
2024/11/24(日) 13:30:20.42ID:pgKmEkUK
本支店間でのデータのやり取りは、やよいの製品サポートサイトで『分散入力について』を参照
そのお作法に則って無くて、自前の入力フォームとかをExcel辺りで作って勝手にCSVでのやりとりをしてるなら、
会計ソフト側で受け入れられるレコードの仕様をキチンと把握しておかないと
勘定科目・補助科目・備考or摘要とかがすんなり難なく受け取れるなら、支店側でテキトーな文言記入してても
問題無く受け入れられるはず
尤も、支店側がデタラメなコードや存在しない科目とかを記入して来たら、ちゃんと校正チェックする作業は
必要だろうが、それが発生する・できてしまう部分を見直ししなきゃいけない
2024/11/24(日) 14:56:03.67ID:3A4Oynwa
>>826
俺も事務屋(経理)のはずなんだがな…
システム整えないと業務量が膨大すぎてしんでしまう
>>827
ありがとう。参照してみます。
なんか考えれば考えるほどVBAでどうにかするより、元のExcelファイル作り替えるか小口現金廃止するしかなさそうだね
2024/11/24(日) 22:48:24.11ID:kCRU65AC
弥生会計ユーザーライセンス払いたくなくて、エクセルでサブシステム作るパターンか
830デフォルトの名無しさん
垢版 |
2024/11/25(月) 00:33:21.31ID:6q/A8E66
>>797
せいかい VBエディター
まちがい VBエディタ
2024/11/25(月) 10:30:13.05ID:2CaoOVjY
せいかい エディター
まちがい 工ディタ一
2024/11/26(火) 00:52:44.14ID:YZFc2jAF
>>831
タも夕にしろよ
833デフォルトの名無しさん
垢版 |
2024/11/26(火) 10:03:25.21ID:HUZSegVv
せいかい エディター
まちがい 工デT夕一
2024/11/26(火) 13:09:04.88ID:9aujKz/s
せいかい エディター
まちがい 工〒゛T夕ー
2024/11/27(水) 08:56:23.39ID:DvWkdvrP
そこまで崩していいんなら濁点も:にして、イはTよりλのが近くないか
2024/11/27(水) 09:12:47.55ID:QoeWWjIA
いや、一気にやったら続かないじゃない
2024/11/27(水) 12:57:25.11ID:aPfi5OMm
Dim rg1, rg2 as Range
rg1 = Cells(1, 1) ' 2024-12-31
rg2 = Cells(2, 1) '(空欄)
rg2.value = rg1.value
このようにA1の"2014-12-31"をA2にコピーしようとすると、
A2のセルの値が45657になってしまいます
値そのままA2にコピーする方法をご教示いただきたくおもいます
よろしくお願いします
2024/11/27(水) 13:52:55.91ID:MVMSa9+B
セルの値をそのままコピーするためには、コピー先のセルの数値形式を日付に設定する必要があります。以下のコードで、A1の値をA2にそのままコピーできます。

vba
Dim rg1 As Range, rg2 As Range
Set rg1 = Cells(1, 1) ' 2024-12-31
Set rg2 = Cells(2, 1) '(空欄)
rg2.Value = rg1.Value
rg2.NumberFormat = rg1.NumberFormat ' 数値形式をコピー
2024/11/27(水) 16:51:15.01ID:HUtUy0ao
>>838
すみません、言葉足らずでした
A1には文字列がはいっており、
場合によっては日付のようにも見えますが、
日付ではないので、値は"2024-12-32"なども取り得ます
他から取得するデータなので、この文字列はどうしようもありません
この値を、VBAを用いて他のセルにコピーすると、
文字列なのに日付と解釈され、日時型の値としてコピーされてしまいます
これを防ぎたいというのが趣旨です
840デフォルトの名無しさん
垢版 |
2024/11/27(水) 18:21:30.61ID:jEDz14aM
>>839
値を文字列変数に取得
値の設定先セルの書式を文字列に
変数値を設定先に代入
とやりたいことそのまま書く
2024/11/27(水) 18:35:22.56ID:MVMSa9+B
了解しました。それでは、A1の文字列が日付として解釈されないように、文字列としてコピーする方法をお教えします。以下のVBAコードを試してみてください。

vba
Dim rg1 As Range, rg2 As Range
Set rg1 = Cells(1, 1) ' "2024-12-32" などの文字列
Set rg2 = Cells(2, 1) ' コピー先のセル
rg2.Value = "'" & rg1.Value ' 値を文字列としてコピー

このコードでは、`rg1.Value`の前にシングルクオート(')を追加して、値を強制的に文字列としてコピーしています。これにより、A2セルにコピーした値が日付として解釈されるのを防ぐことができます。
2024/11/28(木) 18:36:22.65ID:7vnqI5qM
.Value(デフォルトプロパティ)じゃなくて、.Textをコピーすればいいんじゃね
2024/11/29(金) 02:09:38.98ID:YHfjDVN0
↓ これっともっとすっきり書けない? 

If hoge > 75 Then
  '処理1
Else
 If hoge > 50 Then
  '処理2
 Else
  If hoge > 25 Then
   '処理3
  Else
   '処理4
  End If
 End If
End If
2024/11/29(金) 02:36:57.16ID:DXctvJUW
すっきりじゃないかもしれないけど。
比較する条件がhogeだけならCase isでもいいと思う。select caseで調べてみて。

Select Case true
Case hoge>75
処理1
Case hoge>50
処理2
Case hoge>25
処理3
Case else
処理4
End Select
2024/11/29(金) 03:40:38.72ID:V3MBNjzV
>>843
抽象的な質問には無難な回答しかできない
Else と If をくっつければ End If が1回で済む
「処理」は Sub に飛ばして判定ロジックと分けると読みやすくなる

If hoge > 75 Then
  Call 処理1
ElseIf hoge > 50 Then
  Call 処理2
ElseIf hoge > 25 Then
  Call 処理3
Else
  Call 処理4
End If
2024/11/29(金) 04:47:37.78ID:mI/xlHXJ
すっきり書けるかどうかは状況によるなあ
たとえばhogeが整数型で100点満点のテストの点数だったら、こういう書き方もできる

Select Case hoge
  Case 0 To 25
    処理1
  Case 26 To 50
    処理2
  Case 51 To 75
    処理3
  Case 76 To 100
    処理4
End Select
2024/11/29(金) 07:48:42.48ID:ckuwcooG
>>840-842
ダメでした
しかも詳細を書こうとするともう余所エラーが出ます
2024/11/29(金) 13:07:52.33ID:sw8AErMv
文字列型変数の値は"2024-12-31"でも、
Range型のValueプロパティに代入すると勝手にシリアル値が代入される
フォーマットもGeneralからyyyy/m/dに変わる
2024/11/29(金) 13:08:16.00ID:sw8AErMv
代入元が"2024-12-32"の時は、代入先のセルも同値が入る
2024/11/29(金) 13:08:48.76ID:sw8AErMv
"'2024-12-31"をセルに代入し、
MID関数で"'"を取りのぞいても、やはりシリアル値になる
簡単にできると思っていたことが難しいです…
2024/11/29(金) 13:11:46.28ID:sw8AErMv
レス分けたら詳細書けました
クリップボード経由してPasteSpecialメソッドを用いると、
テキストとしての"2024-12-31"もセルに入れることができる
Excelの仕様の問題のような気がしてきました
2024/11/29(金) 18:10:43.05ID:IFmvlPC2
先にセルの書式を文字列 @ にしてみては?
2024/11/29(金) 18:36:49.21ID:sw8AErMv
>>852
うまくいきました!
>>840のアドバイスを試す際、
コード内に@と明示せずGeneralにして試したのも間違いでした
お二人とも本当にありがとうございました!
2024/11/29(金) 21:22:22.42ID:lLH4NdiL
>>844

苔で出来ました。
855デフォルトの名無しさん
垢版 |
2024/11/29(金) 22:54:45.08ID:GFsU//s0
a=(hoge>75)*100+(hoge>50)*10+(hoge>25)*1
on log10(a)-1 goto 処理3,処理2,処理1

こういうイメージは嫌われるんですかね。
856デフォルトの名無しさん
垢版 |
2024/11/29(金) 23:05:46.40ID:lTs330SS
>>853
うまくいってよかった
@予め指定するのが肝でしたから
今回は文字列固定でのコピーでしたけど、他の書式も混在になることが予想されるならコピー元の書式をコピー先に設定するようにしといてもいいかもしれません
2024/11/30(土) 09:08:08.19ID:I6iXAWzN
Int(hoge / 25)
858デフォルトの名無しさん
垢版 |
2024/12/05(木) 11:53:46.88ID:DSq5f289
甲斐はいらん。巨人に来るな。
2024/12/07(土) 11:24:04.60ID:22FK4rxH
私が作ったVBAがうまく動かないんですがどこにバグがありますか?ご教示おねがいします
860デフォルトの名無しさん
垢版 |
2024/12/07(土) 14:05:32.60ID:8ekNK8XT
知能にバグ
2024/12/07(土) 14:45:24.46ID:8w7S0x4U
知恵袋より酷い質問だな
2024/12/07(土) 17:34:43.76ID:m++O9Thl
だな
863デフォルトの名無しさん
垢版 |
2024/12/07(土) 18:08:11.98ID:1M5NkSjP
>>859
あなたが低脳猿なところに問題がある。
2024/12/07(土) 23:19:44.56ID:czlVvPsF
RubyのようにVBAを作った?
2024/12/09(月) 11:28:04.58ID:WZWOgPIq
知恵袋もそうだが、まずはソースコードを見せてもらわないと話にならん事が分からんのか?
2024/12/09(月) 12:17:07.04ID:EtFmQud+
ネタにマジレスという愚かな事が分からんのか?
2024/12/09(月) 13:00:32.05ID:N1CqhZvA
バグバグで抜いた
2024/12/10(火) 01:01:19.96ID:ruXLR+AW
COM考えたやつってもしかして天才なんです?
20年以上前のシステムがいまだに第一線で原液だとか
869デフォルトの名無しさん
垢版 |
2024/12/10(火) 13:23:10.76ID:1EevVDft
>>868
COMファイルはMS-DOS時代の産物
2024/12/10(火) 13:45:36.94ID:y9g7pdkb
>>868
バイナリレベルのオブジェクト指向、インターフェース指向は素晴らしかったと思うよ
2024/12/10(火) 15:02:21.25ID:x6/vupO7
>>869
メモリにそのまま展開される危険なファイル
2024/12/10(火) 17:16:10.86ID:JrehIsPh
逆に移行を妨げてるんだろね、現行システムからの反発激しくて
873デフォルトの名無しさん
垢版 |
2024/12/11(水) 01:28:47.06ID:bYjfV/I8
「反発激」という用語なのかと思った
874デフォルトの名無しさん
垢版 |
2024/12/21(土) 09:32:36.56ID:yZmYWL20
画像サイズが変わってしまい困っています。
メモの編集→コメントの書式設定→色と線タブ→塗りつぶし効果で画像を挿入しています。
サイズタブ→原型のサイズ→リセットを行うにはどうしたら良いでしょうか?
875デフォルトの名無しさん
垢版 |
2024/12/21(土) 10:48:06.83ID:bIHzWCsd
>>868
昔の人は明らかに頭が良かった

>>872
遺構を妨げてるんじゃなくて以降がスムースに逝ってる証拠だよ
876デフォルトの名無しさん
垢版 |
2024/12/21(土) 11:27:23.27ID:hMoGpFaG
>>874
それはVBAの話しなのか?
2024/12/21(土) 13:33:30.79ID:qaV/EKys
>>874
画像のサイズが変わってしまった場合、元のサイズにリセットする方法についてお答えします。

1. **メモの編集**モードに入ります。
2. **コメントの書式設定**を開きます。
3. **色と線タブ**を選択します。
4. **塗りつぶし効果**で画像を挿入します。
5. **サイズタブ**を開きます。

ここで、以下の手順を試してみてください:

- **リセットボタン**がある場合、それをクリックして元のサイズに戻します。
- リセットボタンがない場合、手動で**元のサイズ**に調整する必要があります。挿入した画像の元の幅と高さの値を入力します。

これにより、画像のサイズが元に戻るはずです。もし他にもお困りの点があれば、教えてください。
2024/12/21(土) 15:52:44.31ID:H4Rm1lor
マクロでわからないことがあったらCHatGPT に聞くようになった。
すごいのは、やりたいことを書いてEXCELファイルを添付すると、マクロを組んでくれること。
問題はCHatGPT 頼りになるので、自分のスキルが向上しないことw
879デフォルトの名無しさん
垢版 |
2024/12/21(土) 16:31:15.48ID:yZmYWL20
>>876
>>877
上記の動作をVBAで行う方法が知りたいです
LockAspectRatio、TextFrame.AutoSize等を試しましたがうまくいきませんでした
マクロ記録もやってみましたがリセットの動作は記録されないようです
メモ内の埋め込み画像の元サイズを取得する方法ってありますか?
2024/12/21(土) 21:28:57.26ID:yZmYWL20
自己解決しました
2024/12/22(日) 16:36:05.08ID:6TdXbZK5
昔の人ってすげぇスキル高いと思うわ。ネットや書籍が無い時代に手探りで立派なソースコード書いていたと思うとな
2024/12/22(日) 16:52:27.65ID:yHGbj31B
Sendkeysが上手く動いてくれない。。
DoEventsも入れているのに。。
2024/12/22(日) 17:09:07.17ID:IQoJ7007
>>882
Sendkeysは最後の手段
できるだけ使うな
2024/12/22(日) 17:51:48.04ID:MwFjhbEz
windows apiのsendkeyをdeclareして使う方が良いとか
2024/12/22(日) 18:04:03.23ID:/fc7feyD
対象が何なのかで切り分けが必要だよ
SendInputが確実な場合もある
2024/12/22(日) 18:11:28.97ID:yHGbj31B
やりたいことは「このエクセルファイルのこのシート上で方向キー↓を押しなさい」とマクロの定義をエクセルシート上に書いておくと、その定義どおりに動いてくれるマクロを作りたいだけなんだけどな。。
2024/12/22(日) 21:26:34.16ID:wgWg/n5S
ファイルを開いた瞬間に開始してるからシートのほうが準備できてないとかなんじゃね
知らんけど
888デフォルトの名無しさん
垢版 |
2024/12/22(日) 23:01:29.25ID:db07A3sN
range("A1").select
sendkeys "{DOWN}"
でA2になるぞ
操作したいもの(例えばシート)がアクティブになってないんじゃないかと
889デフォルトの名無しさん
垢版 |
2024/12/25(水) 15:25:06.92ID:PDJSnv/I
sendekysはpopup出てると死ねる
890デフォルトの名無しさん
垢版 |
2024/12/28(土) 00:58:35.34ID:qirfMsYN
そういうのは、VBAからVBSを起動して、そっちにクリッコさせるんだぜ
891デフォルトの名無しさん
垢版 |
2025/01/03(金) 18:15:22.43ID:n8cwekpK
変数名に漢字を使うのってどう?
使えるかもしれないけど気持ち悪いと感じる
2025/01/03(金) 18:23:18.68ID:kR1aFMkz
専門用語とか漢字の利点を感じられるなら
2025/01/03(金) 18:25:04.66ID:HMYtlPTh
業務用語は下手に英語とかローマ字にせず業務用語そのままの漢字変数
ただ頭にアルファベットの接頭辞つける
2025/01/03(金) 18:45:00.49ID:208FlUJL
変数に限らず、定義名やクエリー名、シート名を日本語にしておくと、
なぜかWindowsのupdateの機会でもおかしくなるときがあって、
それ以来、アルファベット表記に変えてしまった。
2025/01/03(金) 18:45:23.61ID:208FlUJL
Unicodeのせいかしら?
2025/01/03(金) 20:26:13.30ID:hehfksyj
趣味でしてるし日本語も使う
2025/01/03(金) 22:04:30.99ID:n8cwekpK
>>893
接頭辞は型名?
898デフォルトの名無しさん
垢版 |
2025/01/03(金) 22:07:46.64ID:n8cwekpK
フォームを作るときオブジェクト名をそのまま使うか変更するのか悩む
後からオブジェクト名を変えるのは避けたほうがいいのはわかる
899デフォルトの名無しさん
垢版 |
2025/01/04(土) 16:29:41.54ID:EU+YyxS0
自治体とか業務に使うの書いてると、その用語使わないとやってられない
可読性が段違い
なのでそれ以外でももちろん漢字も使う
i とかはもちろん別だ
2025/01/04(土) 16:50:34.89ID:37N69Sng
漢字使おうかな
使えるものは使っておけと思い始めた
2025/01/04(土) 17:12:28.42ID:nk/HV8GL
>>897
colとか適当だけどCTRLspaceのオートコンプリートで候補探すとき便利
2025/01/04(土) 17:43:19.80ID:1EYuhsJq
漢字は漢字で弊害があったような
昔それでやっぱ変な事はやめとこってなった
2025/01/04(土) 21:06:46.91ID:37N69Sng
>>901
CTRLspaceのオートコンプリート初めて知った
あざす
2025/01/05(日) 09:58:57.13ID:HsCGP5m6
半角でも「0」「O」「1」「l」みたいなことが漢字でも起きるからな
905デフォルトの名無しさん
垢版 |
2025/01/05(日) 10:52:44.56ID:8kdOFrcZ
名前は文字コードで一意を確保してるだろうから
観掛けが同じでも違うコードなら違う変数やオブジェクトと看做される
百害有って一利無し
2025/01/05(日) 14:47:02.49ID:ToFXQ1cV
VBA漢字変数問題は決着つかないみたいね
他にもVBAで論争ってある?
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況