• 締切済み

文字列の変換

12月以降13月で表示されているセルを1月に変換したいのですが 下記のようにセルM4にデータがあれば13月が入るので1月 また来月になると2月分が14月として入るのでElseif以下にしたいのですが 実行されません。valueを"13月"としてみたが同じでした。 ちなみに1月~14月までは文字列にしたのですが、これが原因なのでしょうか? 何かアドバイスがあればお願い致します。  If   Range("M4") = value Then  Range("M4") = "1月"   Elseif Range("M4:N4") = value Then   Range("M4") = "1月"   Range("N4") = "2月"  End If

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

疑問なのですが、なぜ13月とか14月が出てくるのでしょうか? マクロか関数で入力されているのでしょうか? 仮に関数で入力されているなら、次のような方法はダメでしょうか A1に2008/12/1が入力されているとします B1へ次の式を入力してみてください =DATE(YEAR(A1),MONTH(A1)+1,1) 表示形式を m"月" とすれば12月の次は1月となります マクロの場合ですが、同じくA1に2008/12/1が入力されているとします 次のマクロを実行してみてください Sub test() Range("B1").Value = DateAdd("m", 1, Range("A1").Value) End Sub A1の日付を1ヶ月加算するマクロです(詳しくはヘルプを参照してください) 表示形式を m"月" とすれば12月の次は1月となります 一例を示しましたが、このように入力の時点で適正な値が入力されれば エラー処理も多少省けるのではと思います 外していたら、飛ばしてください

maki06
質問者

補足

hige_082さん 返信ありがとうございます。 >疑問なのですが、なぜ13月とか14月が出てくるのでしょうか? >マクロか関数で入力されているのでしょうか? こちらマクロでの結果が12月以降が13月・14月となっています。 >Range("B1").Value = DateAdd("m", 1, Range("A1").Value) ですがマクロに組み込んでみましたがだめでした。。 ちなみに念の為マクロを組み込んでいない更のBOOKに 今まで回答をもらった通りにマクロを記述したら実行されました。 この違いは何なのでしょうか?

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

全角数字と半角数字の違いとか?

maki06
質問者

補足

n-junさん 返信ありがとうございます。 これも調べてみましたが間違いありませんでした。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

No2です。 下段のほうを、タイプミスしてました。  If Range("M4") <> "13月" Then Range("M4") = "1月"                ↓  If Range("M4") = "13月" Then Range("M4") = "1月"

maki06
質問者

補足

fujillinさん merlionXXさん 返信ありがとうございます。 > If Range("M4") = value Then ??? 値が入っていたら。。としたかったのですが 空白でなければと同じなのでIf Range("M4") <> "" Then でしたね。 失礼しました。 しかしIf Range("M4") = "13月" Then Range("M4") = "1月" では実行されませんでした。 ブレイクポイント+F8で実行させてみたのですがEnd ifに飛んでしまいます。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

質問文だけでは、よくわかんないけど… こういうこと?  If Range("M4") <> "" Then Range("M4") = "1月"  If Range("N4") <> "" Then Range("N4") = "2月" あるいは  If Range("M4") <> "13月" Then Range("M4") = "1月" というようなことかな?

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

> If Range("M4") = value Then ??? このvalueってなんですか? 話が見えないのですが・・・・。 ひょっとして、M4が空白でなければ1月、N4が空白でなければ2月とすればいいんでしょうか? If Range("M4") <> "" Then Range("M4") = "1月" End If If Range("N4") <> "" Then Range("N4") = "2月" End If

関連するQ&A

  • 文字列の最後を変化させたい

    業務でマクロを使うことになり、ご教示お願い致します。 (例) 実行前 →実行後 C列     C列 001     001 003     001-1 002     001-2 005     002 001     002-2 001     003 002     005 同じ文字が複数ある場合、2個目以降には”-1”、”-2”と区別し、並べ替えを実行。 (データはA列~BI列まで入っていますので、C列が動いた場合、連動させる形で…。) ActiveWorkbook.Worksheets(BaseSheet).Activate p = HeaderPos + 1 For i = (HeaderPos + 1) To SearchNum CelValue = Range(Inbound & i).Value For m = 0 To SearchNum If KindType(m) = CelValue Then KindCount(m) = KindCount(m) + 1 Range(Inbound & i).Value = KindType(m) + CStr(KindCount(m)) Exit For ElseIf KindType(m) = "" Then KindType(m) = CelValue KindCount(m) = KindCount(m) + 1 Range(Inbound & i).Value = KindType(m) + CStr(KindCount(m)) Exit For End If Next If CelValue = "" Then Exit For End If Next イメージはこんな感じなのですが、お分かりになる方よろしくお願いいたします。

  • SelectionChangeイベント 文字列エラ

    エクセルvbaなのですが セルをクリックしたときに、該当する値ならメッセージを表示させる際に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = 1Then MsgBox "" End If End Sub ならエラーにならずに動くのに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = "運賃" Then MsgBox "" End If End Sub のように文字列にすると、型が一致しません。 と言うエラーになります。 If Target.Value = "運賃" Then の時でも、空白セルや数値が入ったセルをクリックした際はエラーになりません。 どのような型にすればいいのでしょうか? 実際、「運賃」と言う値が入ってるセルをクリックしても同じエラーが発生します。

  • 条件に従ってセルに入力の構文の簡素化

    よろしくお願いします。 ComboBox4の値を条件(20行づつ下)に従ってセルに入力するのですが 構文の簡素化はできないでしょうか With Worksheets("写真") If ComboBox5.Value = "1" Then .Range("R34").Value = ComboBox4.Value ElseIf ComboBox5.Value = "2" Then .Range("R54").Value = ComboBox4.Value ElseIf ComboBox5.Value = "3" Then .Range("R74").Value = ComboBox4.Value ElseIf ComboBox5.Value = "4" Then .Range("R94").Value = ComboBox4.Value ~ ElseIf ComboBox5.Value = "48 Then .Range("R994").Value = ComboBox4.Value ElseIf ComboBox5.Value = "49" Then .Range("R1014").Value = ComboBox4.Value ElseIf ComboBox5.Value = "50" Then .Range("R1034").Value = ComboBox4.Value End If

  • エクセル VBAで

    変動する数値が、セル A1に入る状況で、 該当シートに Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = 1 Then Range("C62").Value = "○" ElseIf Range("A1").Value = 2 Then Range("C62:C63").Value = "○" ElseIf Range("A1").Value = 3 Then Range("C62:C64").Value = "○" ElseIf Range("A1").Value = 4 Then Range("C62:C65").Value = "○" ElseIf Range("A1").Value = 5 Then Range("C62:C66").Value = "○" ElseIf Range("A1").Value = 6 Then Range("C62:C67").Value = "○" ElseIf Range("A1").Value = 7 Then Range("C62:C68").Value = "○" ElseIf Range("A1").Value = 8 Then Range("C62:C69").Value = "○" ElseIf Range("A1").Value = 9 Then Range("C62:C70").Value = "○" ElseIf Range("A1").Value = 10 Then Range("C62:C71").Value = "○" ElseIf Range("A1").Value = 11 Then Range("C62:C72").Value = "○" ElseIf Range("A1").Value = 12 Then Range("C62:C73").Value = "○" ElseIf Range("A1").Value = 13 Then Range("C62:C74").Value = "○" ElseIf Range("A1").Value = 14 Then Range("C62:C75").Value = "○" ElseIf Range("A1").Value = 15 Then Range("C62:C76").Value = "○" End If End Sub と言ったマクロを記述しましたが、 動作がどうにも重くて困っています。 一度、プレビューをした後は特に遅くなります。 何か良い解決方法はありますでしょうか?

  • エクセルマクロで「1」を「01」に変換したい

    エクセルマクロで、セルに入力された数値を、 変換するマクロを以下のように作成したのですが、 もっと簡単な方法はないのでしょうか。 やりたいことは、 「1」で入力された値を「01」に変換することです。 よろしくお願いします。 c = Sheets("Sheet1").Cells(1, 1).Value If c = 1 Then c = "01" ElseIf c = 2 Then c = "02" ElseIf b = 3 Then c = "03" ElseIf c = 4 Then c = "04" ElseIf c = 5 Then c = "05" ElseIf c = 6 Then c = "06" ElseIf c = 7 Then c = "07" ElseIf c = 8 Then c = "08" ElseIf c = 9 Then c = "09" End If

  • エクセル VBAで

    はじめまして。 VBA初心者です。 エクセルVBAで以下のことをしようとしていますが、 「型が一致しません」とエラーが出ます。 何がおかしいのでしょうか。 やろうとしていることは、以下のようなことです。 G2に入っている値を参照し>0なら、H2に”上昇”と表示。 <0なら、”下降”、=0なら”トンボ”と表示させ、G3以降も G列にデータが入っている限りそのように表示したいと思っております。 よろしくお願いいたします。 Sub 陰陽() If Range("G2:G10000").Value > 0 Then Range("H2:H10000").Value = "上昇" ElseIf Range("G2:G10000").Value < 0 Then Range("H2:H10000").Value = "下降" ElseIf Range("G2:G10000").Value = 0 Then Range("H2:H10000").Value = "トンボ" End If End Sub

  • エクセル マクロ ダブルクリックで…(2)

    たびたび申し訳ございません。 先ほどエクセルでダブルクリックをすると順番に該当セル内の値が「有」→「無」→「空白」 となるマクロをご教授頂き、下記の内容で解決した者です。 B列についての該当セルへの入力がなされるという内容だったのですが、実はC列にも同様の処理を致したく、またもや素人はなすすべが無くなってしまいました。 B列は「要」「不要」「請求」「空白」としたいと思います。 たびたび大変恐縮ですがよろしくご教授くださいませ。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Target   If .Value = "" Then    .Value = "有"   ElseIf .Value = "有" Then    .Value = "無"   ElseIf .Value = "無" Then    .Value = ""   End If End With End Sub

  • Excel VBA IF文がうまく動作しないわけがわかりません…

    未熟な私ですが… セルC2の文字列の6・7桁目に入っている文字により、8桁目の文字を 置き換えるものをつくりました。 例えば、セルのC2に、IRCD-311234 という値があれば IRCD-31A234 にしなさいというものです しかし、 ElseIf の条件式にあてはまるものがでてきても、 すべて最初のIFの条件式にしてしまい、Elseifに反応してくれません。 ****************************************************** Sub 変換() Dim DAT As Range Dim CAR As String If Mid(Range("C2").Value, 6, 2) = 31 Or 32 Or 33 Then For Each DAT In Range("A1:P40")     CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then    CAR = Left(CAR, 7) & "A" & Right(CAR, Len(CAR) - 8)  DAT.Value = CAR End If Next ElseIf Mid(Range("C2").Value, 6, 2) = 37 Or 38 Or 39 Then For Each DAT In Range("A1:P40") CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then CAR = Left(CAR, 7) & "B" & Right(CAR, Len(CAR) - 8) DAT.Value = CAR End If Next  End If  End Sub ****************************************************** 本やネットを見ているのですが、何が悪いのか私にはわかりません…。 どうかご指導をお願いいたします。

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

専門家に質問してみよう