Excel VBA 質問スレ Part76

■ このスレッドは過去ログ倉庫に格納されています
2022/05/01(日) 02:23:41.78ID:2t63WK/jM
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること

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

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

※前スレ
Excel VBA 質問スレ Part75
https://mevius.5ch.net/test/read.cgi/tech/1644384272/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/06/08(水) 17:27:20.86ID:C2b/Gc96H
'エリアが空欄の位置までループ
Do While Sh1.Cells(start, 2) <> ""

Set Wb2 = Workbooks.Add ' 新規ブック作成
Set Sh2 = Wb2.Worksheets("Sheet1") '新規ブックのシートを指定

'ファイル名に付ける日付を取得
Dim strDate As String
strDate = DateSerial(Year(Now), Month(Now), Day(Now))
strDate = Format(strDate, "yyyymmdd")

'Excelファイル出力
FileNam = xPath & Sh1.Cells(start, 2).Value & "" & strDate & ".xlsx"


'コピー元の最初のエリア名を取得
key = Sh1.Cells(start, 2).Value

'同じエリア名が続く間はループ
Sh1.Activate
Do While Sh1.Cells(start, 2).Value = key

'データ行に色をつける
Cells(start, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0)
'Cells(i, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0)
i = i + 1 'コピー先の行を一つ下にずらす。
start = start + 1 'コピー元のエリア名行を一つ下にずらす。

Loop
2022/06/08(水) 17:27:41.62ID:C2b/Gc96H
Dim mySheet As Worksheet: Set mySheet = ActiveSheet

'赤く塗られた行をソートしてコピペする
Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion
myRange.AutoFilter Field:=7, Criteria1:=RGB(255, 0 _
, 0), Operator:=xlFilterCellColor


myRange.SpecialCells(xlCellTypeVisible).Copy
Sh2.Activate

Range("A1").Select
ActiveSheet.Paste
Sh2.Range("G:G").Interior.Pattern = xlNone

mySheet.ShowAllData

Sh1.Range("G:G").Interior.Pattern = xlNone

'分割したファイルを保存して閉じる
Wb2.SaveAs Filename:=FileNam ' 同一フォルダに保存して閉じる
Wb2.Close
'分割ファイルのブックを解放
Set Wb2 = Nothing

Loop
Application.ScreenUpdating = True

MsgBox "終わったよ"

End Sub
2022/06/08(水) 17:31:00.27ID:C2b/Gc96H
元データを少なくして全部で50行くらいにしたら上手くファイルを分けて保存出来てたんですが、、、
もし問題点がお分かりになる方いらっしゃったらよろしくお願いしたいです(>_<)
406デフォルトの名無しさん (ワッチョイ c6da-3oMX)
垢版 |
2022/06/08(水) 18:24:26.53ID:38a4SNrC0
integerの最大っていくつまでだっけ?
407デフォルトの名無しさん (アウアウウー Sa11-3OWO)
垢版 |
2022/06/08(水) 18:40:07.58ID:lFvBESVva
2 ^ 15 - 1 = 32767 じゃね
2022/06/08(水) 18:40:44.71ID:mwMQbcQT0
ググれよ
2022/06/08(水) 19:08:37.35ID:/v6Td7Qv0
>>396
面白いんですけど何で商品の話ですか
410デフォルトの名無しさん (アウアウウー Sa11-fRoS)
垢版 |
2022/06/08(水) 19:25:08.52ID:2MMAQscUa
32bitのexcelと64bitのexcelでintの範囲違うんだろうか
(もちろんOSの話ではない)
2022/06/08(水) 19:34:40.24ID:38a4SNrC0
>i = i + 1 'コピー先の行を一つ下にずらす。

ってあるから貼り付け先が integer 超えたらだめじゃねって思った
2022/06/08(水) 19:43:22.59ID:60yE+Uw7d
Dim 残りの髪の毛 As byte
Dim 抜け毛 As LongLong

あとよろしく
2022/06/08(水) 19:45:48.83ID:C2b/Gc96H
>>411
なるほど!どうりで最後まで貼られてなかったんだ(´;ω;`)早速ありがとうございます。
ちょっと自分でやり直してみます!!m(__)m
2022/06/08(水) 19:46:53.74ID:C2b/Gc96H
>>412
流れぶった切ってゴメンなさい

でも考えすぎてハゲそうな勢いでした。。頭悪くてイヤになります。。
2022/06/08(水) 20:12:39.32ID:C2b/Gc96H
ダメだ、integerをlongに替えてやってみたけど
やはり半分以下しか貼られませんでした。

もう少し頑張ってみます
2022/06/08(水) 20:25:07.29ID:C2b/Gc96H
自己解決しました。1つのエリアの塊が飛び飛びになってたので
同じエリアのブック内で上書きされてたみたいです。

でも皆さんのおかげで解決出来ました。ありがとうございました!
またハゲそうになったらこちらに伺いたいです。。懲りずによろしくお願いいたしますm(__)m
2022/06/08(水) 22:42:41.32ID:3hgKnM3d0
また毛
2022/06/09(木) 00:00:12.33ID:XIUzPNKLM
※よろず~ニュース

波平さん銅像に髪の毛戻る 引き抜かれてから5日の〝スピード植毛〟
https://yorozoonews.jp/article/14640597

杉田 康人

https://public.potaufeu.asahi.com/dd83-p/picture/26885823/46ac4b106abdd0873e85fa50ea6f8cbb_640px.jpg

東京都世田谷区の桜新町商店街にある人気アニメ「サザエさん」一家の銅像から引き抜かれていた髪の毛が8日、復活した。同商店街によると3日朝、波平さんのトレードマークとなっている貴重な1本毛が抜かれているのが見つかった。ワカメちゃんの頭頂部から跳ね出した〝アホ毛〟3本もなくなっていたが、商店街の依頼を受けた業者が8日午後までに修復した。

サザエさん一家は、桜新町に住んでいる設定。作者の長谷川町子氏の美術館・記念館おひざ元の桜新町商店街は、作品ゆかりのストリートとして知られる。銅像は2012年(平成24)に建立したが、商店街の担当者によると波平さんはこれまでに6度、毛を引き抜かれる憂き目に遭っている。ワカメちゃんの髪が抜かれるのは初だという。

 銅像の髪の毛は、針金にビニールをコーティングしたもの。(略)

※省略していますので全文はソース元を参照して下さい。
419デフォルトの名無しさん (ブーイモ MM39-M86+)
垢版 |
2022/06/09(木) 04:46:01.01ID:CxlByAWLM
このハゲ
      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
420デフォルトの名無しさん (ワッチョイ ca4f-QyWa)
垢版 |
2022/06/09(木) 19:07:14.80ID:cD/wL2EQ0
いや
お前らハゲ散らかし過ぎだろ
421デフォルトの名無しさん (ワッチョイ 892f-M86+)
垢版 |
2022/06/09(木) 21:45:50.80ID:WYCVR9XP0
>>420
そんなつもりは毛頭ございません
2022/06/09(木) 22:38:52.28ID:pASwhhxq0
パソコンばっかやっているから禿るんだわ
いい加減気がつけよ
2022/06/09(木) 22:48:34.88ID:/RbqsnKRd
禿げてる奴がパソコンばっかやるようになるんだわ
人生って残酷だよな
424デフォルトの名無しさん (ワッチョイ 892f-M86+)
垢版 |
2022/06/10(金) 07:26:23.24ID:1o37Jrb90
もうしわ毛ありません
2022/06/10(金) 07:28:26.18ID:rEbuXRdM0
真面目に話すと、パソコン作業は頭使うしストレスの負荷が高いから禿やすいとは聞いた。
2022/06/10(金) 08:55:47.16ID:kCKMlptW0
人間関係の煩わしさでストレスの負荷が多い場合が多いから、パソコン作業はハゲにくいらしいよ
2022/06/10(金) 12:04:33.87ID:F7hdpVFcd
パソコンからは強い電磁波が出てるから、パソコン作業は禿げやすいとは聞いた。
428デフォルトの名無しさん (アウアウウー Sa11-3oMX)
垢版 |
2022/06/10(金) 12:51:05.36ID:zP3+9Ywoa
ハゲ対策の情報もいっぱい持ってるから予防できる
2022/06/10(金) 13:28:56.18ID:dcEjX7ueM
男性ホルモンの優位でハゲるから(*ノω・*)テヘ
2022/06/10(金) 13:52:15.99ID:6StqYoESd
パソコンの前でやる事と言ったらそれしか無いからな
2022/06/10(金) 18:44:17.05ID:rEbuXRdM0
男性ホルモンが盛んなのですから禿る
432デフォルトの名無しさん (スッップ Sdea-QKcq)
垢版 |
2022/06/10(金) 22:17:29.28ID:e4qm213id
このスレで質問するレベルの馬鹿が作ったExcel表のせいで葛飾区の保育所は大騒ぎ
2022/06/10(金) 22:31:48.31ID:lQlywAWy0
エクセル2016で複数のbook開いてると単体で開いてるときよりもずっとVBAの動作が遅くなるんだけど
解決策知ってる人いる?
2022/06/10(金) 22:34:53.56ID:/aCQrqDp0
複数開かなきゃいいんじゃね
2022/06/10(金) 23:02:11.31ID:yoZYMWv5H
>>432
(´;ω;`)
2022/06/10(金) 23:11:39.01ID:rEbuXRdM0
>>432
え?詳しく
ググっても詳細出てこない。
禿そうだわ
2022/06/10(金) 23:14:29.48ID:rEbuXRdM0
あ、葛飾区のニュース出て来た
表計算ソフト式に誤りとか最低だろう。
テストしなかったのかな?
2022/06/10(金) 23:17:41.83ID:Vb4kLAL3M
>>436
検索初心者か?
普通にぐぐって一発で出るんだが
https://xtech.nikkei.com/atcl/nxt/news/18/13050/
2022/06/10(金) 23:24:30.64ID:bPqrOIr80
どーせsubtotalじゃなくsumで小計出してたせいで合計が2重計上されたとかじゃねーの
2022/06/11(土) 00:03:58.02ID:peHZyvXnd
Dick A as strong
Dick B as strong

If A > B then
A = Tachi
B = Uke
End if

A => B
2022/06/11(土) 00:50:08.66ID:c8NiZZbH0
>>440
ツッコミどころ満載やな
442デフォルトの名無しさん (ワッチョイ ff4f-LHJ+)
垢版 |
2022/06/11(土) 09:42:09.94ID:k8BssVI/0
A もB も
強そうな型だなオイ
2022/06/11(土) 11:19:57.24ID:zJAfd1A70
ストロングチューハイはやばい酔い方する
2022/06/11(土) 12:41:06.40ID:CM4vZAaMM
A = Bだとどうなるの?
2022/06/11(土) 14:14:10.27ID:ZxVNHiJ20
なんで竿がデカい方が攻めなんだよ
はっ倒すぞ
2022/06/11(土) 14:27:57.92ID:8O7zsVZWM
どこにも竿の大きさなんて書いてない
クラス定義まで見ない限り、何を比較してるのか、このコードだけではわからない
さては思い込みでコードを書いてバグを発生させちゃうタイプだな?
2022/06/11(土) 15:03:55.80ID:zJAfd1A70
分かってないだけでしょ
2022/06/11(土) 16:08:12.40ID:ZxVNHiJ20
If Dick(竿)A>DickB Then A=タチって書いてあんじゃんか
2022/06/11(土) 16:33:22.04ID:k7wiIunZM
Strongは精力じゃね?
大きさならSizeとかLengthとか
2022/06/11(土) 18:37:34.42ID:4UGI/r2E0
禿は精力が強い
2022/06/11(土) 19:01:23.35ID:qcSYfg6i0
B = Not(A)
じゃね
2022/06/11(土) 20:12:32.64ID:VlCDkB2oM
DickクラスのSizeプロパティは読み取り専用
Electプロパティは代入可能
Cumメソッドは1日5回以上使うと例外発生
2022/06/11(土) 21:54:22.38ID:Ejve8RvI0
ShapeとTextBoxをマクロで作ったのを
別のBookのSheetにコピペした時のフォントは
マクロ側とコピペ側だとどちらに依存しますか?
2022/06/11(土) 22:02:30.68ID:TK5b+qDd0
聞く前にやったほうが早いだろw
2022/06/11(土) 22:04:32.17ID:XvS1eUBu0
質問失礼いたします。
ユーザー定義型に以下のようなツリー型になる感じの物をPublicで宣言してて
クラスモジュールにユーザー定義型の変数を作っているのですが、
プロパティの作り方で悩んでいます。

以下標準モジュール内
Public Type MinorItemType ' 小項目
 minorItemName as String ' 小項目名
 minorItemID as Long
End Type

Public Type MajorItemType ' 大項目
 majorItemName as String ' 大項目名
 majorItemID as Long
 minorItem() as MinorItemType
End Type

以下クラスモジュール内
Dim majorItem_() as MajorItemType

この場合、以下のようにMajorItemType型のプロパティを作成して丸ごと渡すのか、
Public Property Get majorItem(ByVal num as Long) as MajorItemType
 majorItem = majorItem_(num)
End Property

それともユーザー定義型の中の変数へのプロパティを1つずつ作成するのか、
どちらが正しいのでしょうか?
ちなみに作成するプロパティは原則Getのみで、
変数に値を取得するのは、クラス内に作成したSubプロシージャで
シートへ値を取りに行かせる具合です。
2022/06/11(土) 22:38:15.29ID:kVPUfUKj0
正解はない
2022/06/11(土) 23:57:34.93ID:XvS1eUBu0
>>456
ありがとうございます。前者の方法で行ってみます。
2022/06/12(日) 00:52:49.29ID:SFQsQSvz0
戦車の砲塔で行ってみてやりにくかったら変えればいいんじゃね
2022/06/12(日) 01:40:55.69ID:QoN69QoAd
芋芋亀してみます!
2022/06/12(日) 18:48:33.62ID:cJxXuNHT0
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
a = "000000000"
b = a
Mid(a, 2, 5) = 123
Debug.Print "変更前" & b
Debug.Print "変更後" & a

 結果
変更前000000000
変更後012300000
これだと左詰めなんだが、こうなるべきじゃないの?
変更後0123 000

midにRightをかぶせてみたんだが、
Right(Mid(a, 2, 5), 3) = 123
オブジェクトが必要て言われる。
どうすればいいの?
461デフォルトの名無しさん (ブーイモ MM67-bhaQ)
垢版 |
2022/06/12(日) 19:03:38.39ID:M5mGZ9TuM
format(123, "000000000")じゃ駄目なの?
2022/06/12(日) 19:09:33.96ID:DaJUN4Jhd
Mid(a, 2, 5) = 123
の右辺を数字のままにしてるからおかしくなると思うので
CStr(123)みたいに文字列にしてからセットすればいいんじゃ
2022/06/12(日) 19:30:47.38ID:ImMFuzyy0
むしろ
Mid(a, 2, 5) = 123
これでなんでaが012300000になるの?どう評価されてるの?
2022/06/12(日) 19:37:46.32ID:ImMFuzyy0
???

Sub foo()

a = 0
Mid(a, 1) = "aaa" '通る
Right(0, 2) = "bbb" 'エラー
Debug.Print a

End Sub
2022/06/12(日) 20:39:25.03ID:uZt7xySi0
自分ならright("000000000" & "123"の右側を取る
2022/06/12(日) 21:12:13.58ID:DaJUN4Jhd
ああ右詰で数字をいれたいのか
自分のレスは無視して
そもそも桁数も統一してないからそこから見直せ
2022/06/12(日) 21:35:58.65ID:cJxXuNHT0
Sub sample()
'01 PIC X(1)
'01 PIC 9(5)
'01 PIC X(3)
a = "A00000ABC": Debug.Print "元データ :" & a
Mid(a, 2, 5) = Format(123, "00000"): Debug.Print "パターン1:" & a
a = "A00000ABC"
Mid(a, 2, 4) = Format(123, "0000"): Debug.Print "パターン2:" & a
a = "A00000ABC"
Mid(a, 2, 5) = Format(123, "000"): Debug.Print "パターン3:" & a
a = "A00000ABC"
Mid(a, 2, 5) = 123: Debug.Print "パターン4:" & a
a = "A00000ABC"
c = "00000"
RSet c = 123
Mid(a, 2, 5) = c: Debug.Print "パターン5:" & a
End Sub

元データ :A00000ABC
パターン1:A00123ABC
パターン2:A01230ABC
パターン3:A12300ABC
パターン4:A12300ABC
パターン5:A 123ABC

パターン1が正解なんだけど、なぜパターン4は3文字分だけ書き換えるんだろう?
パターン4がOKならパターン5でもいけるような気がするが、パターン5は空白を埋める。
RSet Mid(a, 2, 5) = 123 はエラーになる
2022/06/12(日) 21:46:31.55ID:ImMFuzyy0
それ以前に
Mid(a, 2, 5) = Format(123, "00000")
でエラーが出ないのがおかしいだるお
2022/06/12(日) 21:52:55.42ID:SFQsQSvz0
ちなみに -123 のときどうする?
470デフォルトの名無しさん (スプッッ Sd1f-UGZ9)
垢版 |
2022/06/12(日) 22:19:45.52ID:+/mRZvLHd
ID:ImMFuzyy0

馬鹿は黙っていればいいのに
そうやって馬鹿を曝け出していると頭の皮膚も曝け出されるぞ
2022/06/12(日) 22:37:23.13ID:aOGWTw070
midステートメントは今ある文字列に対して別の文字列を被せるだけの動作だよ
2022/06/12(日) 23:03:38.74ID:b6RzJ+XoM
別の文字列を被せるのは仕様外動作だと思うけどな
2022/06/12(日) 23:07:02.46ID:ImMFuzyy0
何一つその動作がのってねぇ
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mid-function
2022/06/12(日) 23:10:22.37ID:UzvPms3IM
引数以外の手段で関数に値を代入(?)するという前代未聞の珍動作
何が起きるか分かったもんじゃない
2022/06/12(日) 23:13:02.41ID:cJxXuNHT0
つまり
Mid(a, 2, 5) = 123

aの2文字目から5文字分ところに、"123"を書き込むんだけど、
3文字しかないから、4-5文字目は何もしないてことだよね。
でも代入の原則論から言えば、足りない部分はスペースで埋めるんじゃないのか?
RSetは足りない部分はスペースで埋めてる。
まあ、それが仕様だて言えばそうだけど、
深く考えて作られてないのかな。
もし、RSetも3文字しか代入しないのなら、RIGHTやFORMATを使わなくても0埋めができるし、
単純な代入だから性能もいいはず。
2022/06/12(日) 23:16:04.57ID:cJxXuNHT0
>>473
それはmid関数。
midステートメントとは別物だよwww。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mid-statement
オレもさっき知ったんだがwww
2022/06/12(日) 23:29:45.68ID:nFfW5LM6M
そんなものがあったのか!?
けど代入元の型は文字列になってるけど数値を代入していいのか?
2022/06/12(日) 23:33:25.21ID:ImMFuzyy0
>>476
ありがとう!!!
気になって眠れないとこだった。俺の頭がおかしくなったのかと思ったわw

ステートメント、一度目を通しておいたほうがいいね
https://excel-ubara.com/EXCEL/EXCEL908.html
>>477
vbaで何をいっとるんじゃい
2022/06/12(日) 23:54:08.09ID:cJxXuNHT0
>>477
どの言語もできるような気もするが。
出来ない言語なんかあったけ?
化石のような言語のCOBOLでもできる。
COBOLだと9型の変数があって、VBA風にかくと
Dim a as 99999
a = 123
でaを00123にしてくれる。
a=RIGHT("00000" & 123,5)なんてやってるのをみて驚いたわ。
2022/06/12(日) 23:56:26.34ID:as/ibVfq0
ちなみに、MidステートメントはLetステートメントと違ってヒープ領域の再確保を行わないようなので
めちゃくちゃいっぱい文字列を結合したり置き換えたりする文字列操作をMidステートメントで高速化できたりはする
色々注意しなきゃならんしめんどいけど
2022/06/13(月) 14:10:09.78ID:cuhQaR4kM
mid("00000",5-len(a),len(a))=a
なんてやってるの?
2022/06/13(月) 15:41:58.25ID:e6QxpplAd
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
これがやりたい事なんだから
A.MIDステートメントを使うなら右辺の値を5桁固定にする
 Mid(a,2,5) = Format(123,"00000")
B.代入するの文字列を代入先の左側+5桁固定の値+代入先の右側にする
 a = Mid(a,1,1) & Format(123,"00000") & Mid(a,7,Len(a))
あたりに落ち着くのでは 
自分は誤解されないためにもBのようなコードがいいと思うけど
2022/06/13(月) 18:10:47.94ID:S+tXl/uoD
自分なら
right("00000" & 123, 5)
って書く
2022/06/13(月) 18:28:06.25ID:CiY+fWgN0
セルの書式設定に 0000# って書けばいいのに
2022/06/13(月) 19:38:44.31ID:5YQd33j2d
いやどうせVBAでやるならNumberFormatLocalでやろうよ
2022/06/13(月) 20:02:21.45ID:3bSnFxDm0
要件にもよるが正規表現とFormat()で。
2022/06/13(月) 21:14:24.62ID:c4yOIzj40
>>482
https://www.moug.net/tech/exvba/0140045.html
MIDステートメントのほうが速いらしい。
でもオレが試したら逆だったけど・・・・
2022/06/13(月) 22:37:41.37ID:pISmU68J0
みんなのコードカッコいいわ
やっぱりコードはカッコ良くなきゃ舐められるわな
2022/06/14(火) 01:08:48.71ID:GVYlqPTN0
>>488
他に見るやつがいないなら動きゃいいとか思ってしまう
2022/06/14(火) 01:18:48.91ID:MKKHJJii0
てか若者とお年を召された方のコードの書き方が明らかに違うのだが、古臭い目新しいとかあるのかな?
2022/06/14(火) 02:02:23.05ID:GVYlqPTN0
今は可読性悪いのは駄目ってなってるけど逆に改行や変数名の長さすらケチってた時代もあった
んで言語が進化するにつれて書き方も変わっていった
今でも昔の方法で書けるっちゃ書けるけどそれが古臭いってことだと思う
2022/06/14(火) 02:07:02.10ID:MKKHJJii0
お年を召された方(60~70代)のコード見たら、やたら変数ばかり多かった印象が。
変数使わなくても普通に書けばいいじゃんて部分まで変数に入れていた。
2022/06/14(火) 02:33:52.97ID:TUO2NKc8M
>>492
今でもコード中に定数をそのまま書くのは別に推奨されてないぞ
せめて別の人がコードを見た時に数字の意味がわかるようにしとかないとバグの元になる
2022/06/14(火) 07:10:06.79ID:r7EVbuk4D
>>492のコードはVBAに限らず可読性悪そう
495デフォルトの名無しさん (アウアウウー Sa67-IhGj)
垢版 |
2022/06/14(火) 07:54:24.65ID:7uTlYRrCa
>>492
変数にいれないで普通の書くのか?
定数なら定数として定義すると思うが
2022/06/14(火) 08:25:15.24ID:bcp0w+/6d
>名著「リーダブルコード」に「説明変数」という言葉が出てくる。
2022/06/14(火) 08:35:10.08ID:T3k1EtCC0
マジックナンバーは避けようぜ
後で見返す時に(この4って何を意味してるんだ…?)ってなると効率落ちる
2022/06/14(火) 08:37:28.94ID:YQpYn/pu0
郵便番号+電話番号ていう文字列があるんだが、郵便番号、電話番号を別々の変数に入れたいので
こうしてみたんだがうまくいかない。
なにか手はある?
いまType1は項目が2個だけど、なるべく一括で入れたいのだが・・・

Type Type1
Zip As String * 7
telnum As String * 11
End Type

Sub Sample()
Dim b As Type1
a = "151123408012341234"
b = a
End Sub
499デフォルトの名無しさん (ワッチョイ ff05-bM3h)
垢版 |
2022/06/14(火) 09:04:23.14ID:06qw5AlY0
aの文字列が固定長なら
Left(a,7)
Right(a,11)
でダメなんか
2022/06/14(火) 09:11:18.76ID:b1sVlKW1M
>>498
C系やVBなら可能だけどVBAではWin32APIを使わないと無理
また、可能だからと言って、複数の変数に一括でデータを入れるような書き方は可読性が下がるので推奨されない

コードをコンパクトに見せたいなら代入部分を以下のようにモジュール化するのがマスト
電話をRightで取り出さないのは、固定電話は桁数が違うから

Sub SetNumbers(ByRef T As Type1, N As String)
  T.Zip = Left(N, 7)
  T.telnum = Mid(N, 8, 11)
End Sub
2022/06/14(火) 10:48:30.78ID:WigeF4Tr0
>>498
若干無理矢理だけどクラス使えば似たような事は出来る
Type1.cls
Private Zip_ As String * 7
Private telnum_ As String * 11
Public Property Let Default(N As String)
Zip_ = Left(N, 7)
telnum = Mid(N, 8)
End Property
Public Property Get Zip()
Zip = Zip_
End Property
Public Property Get telnum()
telnum = telnum_
End Property
デフォルトプロパティの設定がちょっとトリッキー、こことかを参考に
https://thom.hateblo.jp/entry/2015/02/16/003000
あとは
Dim a As New Type1
a = "151123408012341234"
Debug.Print a.Zip
Debug.Print a.telnum
2022/06/14(火) 13:04:52.31ID:IIEda1opd
>>487
何を目的とするかによるけど
速度は重視しないのであれば比較的周知されているBの方がいいのではと思うだけで
書き方なんて色々あるんだから試行錯誤すればいいと思う
2022/06/14(火) 13:11:14.27ID:IIEda1opd
>>498
記憶があいまいだけど
長さの合計値が同じになる変数を持つ構造体を作ってそれをLSetで代入すれば可能だと思う

Type Type1
Zip As String * 7
telnum As String * 11
End Type
Type Type2
Value As String * 18
End Type

Sub Sample()
Dim b As Type1
Dim a As Type1
a.Value = "151123408012341234"
LSet b = a
End Sub
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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