• ベストアンサー

データの抜出

A1セルには、H24.5.20日とか、H24.12月分とかのデータが入ります。 B1セルに、5月分とか、12月分と出るような関数を教えていただけないでしょうか? よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.2・3・6です! 何度もごめんなさい。 前回のコードは「売上帳」SheetのB1セルをシリアル値にして、表示形式だけを変えたコードでした。 B1セルはわざわざシリアル値にする必要はないと思います。 前回のコードは無視して↓のコードに訂正してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim str As String, myArray As Variant On Error Resume Next If Target.Address = "$A$1" Then If InStr(Target, "月分") Then str = WorksheetFunction.Substitute(Target, "月分", ".") Else str = Target End If myArray = Split(str, ".") Range("B1") = myArray(1) & "月分" End If End Sub 'この行まで ※ B1セルは文字列となります。 何度も失礼しました。m(_ _)m

その他の回答 (8)

回答No.9

#8です。 >提示していただいた通りのパターンがあると思っていただいてOKです。 後出し、、、しかも、人の例。A列は数値(シリアル値)もあるし、文字列もある。 さらに、当方例示のA1セルは文字列。 >A1は日付データではなく、文字列であるとできません。 なんで、このような返答が返るのか? B1セルの値が違うのか?どのような値が返ってきたかも書かれていない。 >Ar列のデータは文字列と思てください。 Ar列?? AR列だとしてもそのような列は今まで出てきていないし、意味もない。 A7セルの打ち間違い? =IF(ISNUMBER(A1*1),TEXT(A1,"m月分"), TEXT(SUBSTITUTE(SUBSTITUTE(A1,"日",""),"月分",".1"),"m月分")) 根本的に、シリアル値で入力されていないのが問題だと思う 入力規則で、日付を入力するように限定できればあらゆる書き方に対処しなくて済む

noname#241383
質問者

補足

すんません。

回答No.8

規則性を提示していないのに、サンプルが少なすぎ!! =TEXT(SUBSTITUTE(SUBSTITUTE(A1,"日",""),"月分",".1"),"m月分")

noname#241383
質問者

補足

すいません、 提示していただいた通りのパターンがあると思っていただいてOKです。 A1は日付データではなく、文字列であるとできません。 Ar列のデータは文字列と思てください。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.2・3です。 >ところが、下記のようにマクロでしています。 >Sheets("売上帳").Range("A1").Value = ActiveCell.Value とありますのので・・・ マクロでA1セルデータ(文字列)を表示していると、確かにシリアル値として判断してくれませんね! そこで一案です。 マクロが組んであるのであれば、マクロでB1セルを表示してみてはどうでしょうか? 前提条件として (1)A1セルデータは「H○.○.○日」もしくは「H○.月分」のどちらかとする (2)A1セルデータは「平成」限定! 以上の条件で 画面左下の「売上帳」のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストして、設定してあるマクロを実行してみてください。 A1セルデータが変更するとB2セルに表示するようにしてみました。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim str As String, myArray As Variant On Error Resume Next If Target.Address = "$A$1" Then str = Target If InStr(str, "日") Then str = WorksheetFunction.Substitute(str, "日", "") ElseIf InStr(str, "月分") Then str = WorksheetFunction.Substitute(str, "月分", ".1") End If myArray = Split(str, ".") str = Right(myArray(0), Len(myArray(0)) - 1) + 1988 & "/" & myArray(1) & "/" & myArray(2) With Range("B1") .Value = str .NumberFormatLocal = "m月分" End With End If End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

回答No.5

この日付みたいな2形式に対応するだけなら、 チョット汚いが、A1を変換するには、 =IF(RIGHT($A1,1)="日",TEXT(SUBSTITUTE($A1,"日",""),"m月分"),IF(RIGHT($A1,2)="月分",RIGHT($A1,LEN($A1)-FIND(".",$A1,1)),$A1))

回答No.4

No.1です。そうですね。自分で回答しておいてなんですが、No.3さんの「=A1」という式をお勧めします。こちらがいちばんスマートでした。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 投稿後に気づきました。 セルの表示形式部分に間違いがありました。 B1セルに =MONTH(A1) という数式を入れる場合、表示形式のユーザー定義は 0月分 としてください。 B1セルの数式を単に =A1 とした場合は、ユーザー定義から m月分 とします。 何度も失礼しました。m(_ _)m

noname#241383
質問者

補足

教えていただいたものでできないのです。 しかし、原因はわかりました。 A1のデータですが、手入力で5/25とかしたら教えていただいたものでできます。 ところが、下記のようにマクロでしています。 Sheets("売上帳").Range("A1").Value = ActiveCell.Value なにあ変換しないといけないようです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! すでに回答は出ていますが・・・ 別案として =TEXT(A1,"m月分") 尚、いずれにしても文字列になります。 数値としてのデータが欲しい場合は セルの書式設定 → 表示形式 → ユーザー定義 から m月分 としておいて =MONTH(A1) という数式を入れます。 これでA1セルが仮に「H24.5.20日」となっている場合は 「5」という数値になり、見た目が「5月分」となります。m(_ _)m

回答No.1

きっと、A列は「日付」という書式を設定しているという意味ですね?そのケースでは、次の数式だけでオッケーです。MONTH関数のほか、YEAR関数、DAY関数というのもあるので、インターネットで検索してみてください。 =month(a1)&"月分"

noname#241383
質問者

補足

ありがとうございます。 教えていただいたものでできないのです。 しかし、原因はわかりました。 A1のデータですが、手入力で5/25とかしたら教えていただいたものでできます。 ところが、下記のようにマクロでしています。 Sheets("売上帳").Range("A1").Value = ActiveCell.Value なにあ変換しないといけないようです。

関連するQ&A

専門家に質問してみよう