Excel VBA 質問スレ Part81 (857レス)
上下前次1-新
1(4): 04/18(木)14:03 ID:cMr18rZu(1/5) AAS
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK
次スレは>>980が立てること
無理なら細かく安価指定
関連スレ
Excel VBA 質問スレ Part79(ワッチョイあり)
2chスレ:tech
※前スレ
Excel VBA 質問スレ Part79
2chスレ:tech
省2
838(1): 11/27(水)13:52 ID:MVMSa9+B(1/2) AAS
セルの値をそのままコピーするためには、コピー先のセルの数値形式を日付に設定する必要があります。以下のコードで、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 ' 数値形式をコピー
839(1): 11/27(水)16:51 ID:HUtUy0ao(1) AAS
>>838
すみません、言葉足らずでした
A1には文字列がはいっており、
場合によっては日付のようにも見えますが、
日付ではないので、値は"2024-12-32"なども取り得ます
他から取得するデータなので、この文字列はどうしようもありません
この値を、VBAを用いて他のセルにコピーすると、
文字列なのに日付と解釈され、日時型の値としてコピーされてしまいます
これを防ぎたいというのが趣旨です
840(2): 11/27(水)18:21 ID:jEDz14aM(1) AAS
>>839
値を文字列変数に取得
値の設定先セルの書式を文字列に
変数値を設定先に代入
とやりたいことそのまま書く
841(1): 11/27(水)18:35 ID:MVMSa9+B(2/2) AAS
了解しました。それでは、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セルにコピーした値が日付として解釈されるのを防ぐことができます。
842(1): 11/28(木)18:36 ID:7vnqI5qM(1) AAS
.Value(デフォルトプロパティ)じゃなくて、.Textをコピーすればいいんじゃね
843(1): 11/29(金)02:09 ID:YHfjDVN0(1) AAS
↓ これっともっとすっきり書けない?
If hoge > 75 Then
'処理1
Else
If hoge > 50 Then
'処理2
Else
If hoge > 25 Then
'処理3
Else
省4
844(1): 警備員[Lv.22] 11/29(金)02:36 ID:DXctvJUW(1) AAS
すっきりじゃないかもしれないけど。
比較する条件がhogeだけならCase isでもいいと思う。select caseで調べてみて。
Select Case true
Case hoge>75
処理1
Case hoge>50
処理2
Case hoge>25
処理3
Case else
省2
845: 11/29(金)03:40 ID:V3MBNjzV(1) AAS
>>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
省3
846: 11/29(金)04:47 ID:mI/xlHXJ(1) AAS
すっきり書けるかどうかは状況によるなあ
たとえばhogeが整数型で100点満点のテストの点数だったら、こういう書き方もできる
Select Case hoge
Case 0 To 25
処理1
Case 26 To 50
処理2
Case 51 To 75
処理3
Case 76 To 100
省2
847: 11/29(金)07:48 ID:ckuwcooG(1) AAS
>>840-842
ダメでした
しかも詳細を書こうとするともう余所エラーが出ます
848: 11/29(金)13:07 ID:sw8AErMv(1/5) AAS
文字列型変数の値は"2024-12-31"でも、
Range型のValueプロパティに代入すると勝手にシリアル値が代入される
フォーマットもGeneralからyyyy/m/dに変わる
849: 11/29(金)13:08 ID:sw8AErMv(2/5) AAS
代入元が"2024-12-32"の時は、代入先のセルも同値が入る
850: 11/29(金)13:08 ID:sw8AErMv(3/5) AAS
"'2024-12-31"をセルに代入し、
MID関数で"'"を取りのぞいても、やはりシリアル値になる
簡単にできると思っていたことが難しいです…
851: 11/29(金)13:11 ID:sw8AErMv(4/5) AAS
レス分けたら詳細書けました
クリップボード経由してPasteSpecialメソッドを用いると、
テキストとしての"2024-12-31"もセルに入れることができる
Excelの仕様の問題のような気がしてきました
852(1): 11/29(金)18:10 ID:IFmvlPC2(1) AAS
先にセルの書式を文字列 @ にしてみては?
853(1): 11/29(金)18:36 ID:sw8AErMv(5/5) AAS
>>852
うまくいきました!
>>840のアドバイスを試す際、
コード内に@と明示せずGeneralにして試したのも間違いでした
お二人とも本当にありがとうございました!
854: 11/29(金)21:22 ID:lLH4NdiL(1) AAS
>>844
苔で出来ました。
855: 11/29(金)22:54 ID:GFsU//s0(1) AAS
a=(hoge>75)*100+(hoge>50)*10+(hoge>25)*1
on log10(a)-1 goto 処理3,処理2,処理1
こういうイメージは嫌われるんですかね。
856: 11/29(金)23:05 ID:lTs330SS(1) AAS
>>853
うまくいってよかった
@予め指定するのが肝でしたから
今回は文字列固定でのコピーでしたけど、他の書式も混在になることが予想されるならコピー元の書式をコピー先に設定するようにしといてもいいかもしれません
857: 11/30(土)09:08 ID:I6iXAWzN(1) AAS
Int(hoge / 25)
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.013s