
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
失敬、間違いました。
>秒を含む
あと3文字足さないとダメでした。
=IF(A1="","",(MID(A1,9,2)&" "&MID(A1,5,3)&" "&MID(A1,11,5))+TRIM(RIGHT(A1,11)))
失礼しました。
keithinさんご回答ありがとうございます。ご回答の部分でお手数おかけしてしまい申し訳ありませんでしたMID関数の文字抽出数に執着してしまい前に進みませんでした、RIGHT関数の部分だったんですね。
なるほど、No.7の形式だと11時の時は1文字ずれて正しく出なくなってしまいますね、お知らせ頂きありがとうございます。重ねて感謝申し上げます。早く覚えられるよう精進致します。
No.7
- 回答日時:
>秒を含む
=IF(A1="","",(MID(A1,9,2)&" "&MID(A1,5,3)&" "&MID(A1,11,5))+TRIM(RIGHT(A1,10)))
#補足
あなたがご自分でどうやってみて失敗したのかキチンと補足として情報提供してくれれば、どこを間違えているからこう考えますと、もっと役に立つ回答も出来ますが。
単に「できません」の丸投げなので、また回答オンリーしか答えられません。ありがちな状況としては、似たり寄ったりの回答が多数寄せられてすっかり混乱しているのかもしれませんね。フォローはしませんが応援はしていますので、頑張って理解してください。
No.6
- 回答日時:
こんにちは。
私も、せっかくだから、VBAで回答します。
数式を検討してみましたが、あまり大した違いが出ませんでした。
コンパネをいじる方法があるような気がしましたが、それはやめます。
そもそも、曜日を取り去り、"Nov 1 2011 9:00 AM" は、日付の位置だけ交換し、" 1 Nov 2011 9:00 AM" とすれば、そのまま日付認識します。本来は、以下のようなユーザー定義関数ではなく、そのままマクロで置換してしまうのが早いような気がします。
ご質問の趣旨は、そういう問題ではなさそうなので、あえて、掲示します。みなさんの作ったものとは、作業は同じですが、異質なものです。
こんなものを作っているのは、あくまでも、長い間VBAをやっていなかったので、トレーニングです。
以下のユーザー定義関数は汎用性があります。
'例
Fri Nov 1 2012 9:00 AM
Fri 1 Nov 2012 9:00 AM
Nov 1 2012 9:00 AM
"2012/11/01" ←これは意味がありませんが、同じようにしてみました。
"1/10/2012" ←これは、アメリカ方式に認識するようです。
'//標準モジュール
Public Function reDateVal(arg As Variant)
Dim Re As Object
Dim arDat As Variant
Dim arPat As Variant
Dim i As Long
Dim pat0, Pat1 As String, Pat2 As String, Pat3 As String, Pat4 As String, Pat5 As String
Dim r As Variant, r1 As Variant, r2 As Variant
r1 = "": r2 = ""
On Error Resume Next
r1 = DateValue(arg)
r2 = TimeValue(arg)
If IsDate(r1) Then GoTo Express
On Error GoTo 0
pat0 = "([0-3]{1,2})[^\d]" '月の数字(予備)
Pat1 = "[a-z]{3}" '月の文字
Pat2 = "19\d\d|20\d\d" '年
Pat3 = "(\d{1,2})[\s]*" '日付
Pat4 = "\d{1,2}:\d{2}" '時間
Pat5 = "am|pm"
arPat = Array(pat0, Pat1, Pat2, Pat3, Pat4, Pat5)
arg = StrConv(Trim(arg), vbLowerCase + vbNarrow)
ReDim arDat(UBound(arPat))
With CreateObject("VBScript.Regexp")
.Pattern = "mon|tue|wed|tue|fri|sat|sun"
Set r = .Execute(arg)
If r.Count > 0 Then
arg = .Replace(arg, "")
End If
For i = 0 To UBound(arPat)
.Pattern = arPat(i)
Set r = .Execute(arg)
If r.Count > 0 Then
arDat(i) = r.Item(0).Value
If r.Item(0).SubMatches.Count > 0 Then
arDat(i) = r.Item(0).SubMatches(0)
End If
End If
Next i
End With
On Error Resume Next
r1 = DateValue(arDat(2) & "-" & arDat(1) & "-" & arDat(3))
If r1 = "" Then r1 = DateValue(arDat(2) & "-" & arDat(0) & "-" & arDat(3))
r2 = TimeValue(arDat(4) & " " & arDat(5))
On Error GoTo 0
Express:
reDateVal = r1 & " " & r2
End Function
'//
使い方:
= reDateVal(A1)
後は、書式で望む表示形式に変更
ご回答ありがとうございます!まだ初心者で深く理解はできておりませんが、こうやって関数と同じ結果がでるのだと断片的にですが見えます。少しずつ理解して自身で作れるくらいになりたいですね。
No.5
- 回答日時:
ANo.4です。
申し訳御座いません、間違えておりました。
正しい関数は、以下の通りです。
=IF(ISNUMBER((MID(A1,9,2)&MID(A1,4,5)&REPLACE(A1,1,10,))+0),(MID(A1,9,2)&MID(A1,4,5)&REPLACE(A1,1,10,))+0,"")
或いは
=IF(A1="",(MID(A1,9,2)&MID(A1,4,5)&REPLACE(A1,1,10,))+0,"")
ご回答ありがとうございます!No.1さんご回答の関数だけではなくこのような方法もあるのですね、それぞれの関数を理解してぜひ利用したいと思います。
No.4
- 回答日時:
元となる文字列がA1セルにあるものとした場合には、まず、変換後の日時データを表示させるセルに次の関数を入力して下さい。
=IF(ISNUMBER((MID(A1,5,2)&" "&LEFT(A1,4)&REPLACE(A1,1,6,))+0),(MID(A1,5,2)&" "&LEFT(A1,4)&REPLACE(A1,1,6,))+0,"")
そして、そのセルの書式設定の表示形式を[ユーザー定義]の
yyyy/mm/dd h:mm
にして下さい。
尚、入力されている文字列データが、必ず、御質問文中の例と同様の形式のデータとなっている事が保障されてる場合には、次の様な関数でも、同じ事が出来ます。
=IF(A1="",(MID(A1,5,2)&" "&LEFT(A1,4)&REPLACE(A1,1,6,))+0,"")
No.3
- 回答日時:
> 複数の方法があればあるだけ
との事でしたので、私からはあえてユーザー定義関数を(笑)。
Function DateConv(myStr As String) As Variant
Dim myYear As Integer, myMonth As Integer, myDay As Integer
Dim myTime As String
Dim EMonth As String
Dim AMon As Variant, BMon As Variant, i As Integer
AMon = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
BMon = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
myYear = Trim(Mid(myStr, 11, 5))
EMonth = Trim(Mid(myStr, 5, 3))
For i = 0 To 11
If AMon(i) = EMonth Then
myMonth = Replace(EMonth, AMon(i), BMon(i))
End If
Next
myDay = Trim(Mid(myStr, 9, 2))
myTime = Trim(Right(myStr, 8))
DateConv = DateSerial(myYear, myMonth, myDay) + TimeValue(myTime)
End Function
これを標準モジュールに書いておくと、
=dateconv(A1)
のように、ワークシート上で普通の(?)関数として使えるかもしれません。
添付図では書式を「yyyy/m/d ddd h:mm AM/PM」にしていますが、
通常通りの「yyyy/mm/dd hh:mm」にももちろん対応します。
ただし、対象セルが「"Fri Nov 2 2012 9:00 PM"と言う文字列」じゃないとエラーが出ます。
踏まえて、わざわざここまでやる必要があるかどうかは、全く以て謎です(笑)。

ご回答ありがとうございます!初心者のような自分には理解するのにレベルの高いやり方ですが、関数の構造を理解するには助かります。図示までいただけて感謝です。
No.2
- 回答日時:
No.1さんの関数で、バッチリ変換できますが、複数の方法をご希望されてるので手作業の案で。
該当セル選択→データ→区切り位置→「スペースによって右または左に揃えられた固定長フィールドのデータ」を選択
↓
次へ→スペースの位置に上向き矢印で区切られたデータが出てくるので、2・3・5本目をダブルクリックで削除
↓
次へ→データのプレビューで日付のセクションを選択して、上にある列のデータ形式の日付の中から「MDY」を選択
↓
完了
これで、曜日、日付、時間のセルに分かれます。
どこかのセルに日付と時間のセルを足し算し、表示形式を「yyyy/mm/dd hh:mm」
で如何でしょうか?
ご回答ありがとうございます。こちらも試してみました、こういうやり方もあるのかと勉強させていただきました!No.1さんのとも違う視点で同じ結果が出せるのはエクセルの面白いところだなあ、と初心者ながら感じています。
No.1
- 回答日時:
A1に文字列があるとして
=IF(A1="","",(MID(A1,9,2)&" "&MID(A1,5,3)&" "&MID(A1,11,5))+TRIM(RIGHT(A1,8)))
セルの書式設定の表示形式のユーザー定義で年/月/日 時:分の表示を付けておきます。
早速のご返答ありがとうございます。MID関数とTRIM関数いうものを使えばよいのですね、まだまだ勉強中で非常に助かりました。
ちなみに例では秒数まで含んでおりませんが秒数まで含む場合(例:Fri Nov 2 2012 9:00:53 PM)ではどのように関数が変化するのでしょうか?自分なりにMID関数の文字数を変更してユーザー定義を「yyyy/m/d h:mm:ss」と変えてみたのですがうまく変換ができませんでした。都度のお願いとなり大変申し訳ありません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Excel(エクセル) Excel 同一セル内 年、日 入れ替え 5 2022/04/09 01:48
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付だけを変更して印刷(Excel)
-
Excelに入力した個々の日付の数...
-
入力後に日付順になるように自...
-
【マクロ】A列にある、日付(本...
-
日誌を作るため印刷時に日付を...
-
エクセルで日付入力欄を作成し...
-
アクロバットでスタンプを作る...
-
☆Excelエクセルで入力した日の...
-
エクセル表からある項目と同じ...
-
日付を入力したセルをファイル...
-
Excelで半年後の日付を計算したい
-
エクセル関数で日付かどうかの...
-
前々回の質問で大喜びのtoday()...
-
エクセルでの日付の差分算出に...
-
Excelでの緯度経度の表示について
-
Excelで8/26等の日付を全てその...
-
日数の計算です
-
シリアル値とそうでない日付を...
-
エクセル関数
-
エクセルの日付の変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】A列にある、日付(本...
-
Excelに入力した個々の日付の数...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
エクセルでENTERを押すと数式が...
-
31:30:00が1900/1/1 7:30:0
-
入力後に日付順になるように自...
-
Excelで8/26等の日付を全てその...
-
エクセルで数字列の間に『/』を...
-
エクセル 当番表の作り方 エク...
-
エクセルで日付入力欄を作成し...
-
ファイルのオープン時に今日の...
-
エクセル関数で日付かどうかの...
-
エクセルで1年後の月末を表示さ...
-
EXCELで直近の日付を抽出する関数
-
エクセル グラフ 軸の日付表記...
-
excelで月末日を判定したい
-
WORDで翌日や翌々日の日付を表...
-
ワード差込について
-
日付の照合でFALSEになります。
おすすめ情報