人気マンガがだれでも無料♪電子コミック読み放題!!

エクセル2016で
下記マクロで指定範囲をCSVで出力するようにしているのですが
名前を付けて保存の画面が表示されたときに
ファイル名の欄に作業中のファイル名が表示されません。
エクセル2010では表示されてたのですが2016ではできなくなりました。
修正案を教えていただけないでしょうか。
よろしくお願いいたします。

Sub CSV()
Dim myRng As Range, myFileName As String
Set myRng = Range("A:A,B:B,C:C")
If myRng Is Nothing Then Exit Sub
myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")
If myFileName = "False" Then Exit Sub
Application.ScreenUpdating = False
With Worksheets.Add
myRng.Copy .Cells(1, 1)
.Move
End With
With ActiveWorkbook
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
.Close False
End With
Application.ScreenUpdating = True
Set myRng = Nothing
End Sub

A 回答 (4件)

>作業中のファイル名が表示されませんでした。


>エクセル2010では問題ないので、やはりバグなのでしょうか?
>また何かお気付きされましたら教えてください。

ここの掲示板で、Excel 2013以降で再現可能なバグらしきものに出会うことが増えているように思います。SDI(Single Document Interface) せいなのでしょうか。Excel 2010 は、なかなか手放すことができません。

・Application.Dialogs(xlDialogSaveAs).Show , 6
これで表示は出るにしても、古いダイアログでファイル名を単独では取得できないので、あまりお勧めできません。

No.3のコードで、以下の部分にブレークポイントをつけて、bkNameの変数がどうなっているか調べることはできますか?
もし、ご存知でしたら、以下は無視してください。

ブレークポイントは、VBA Editor の上部のデバックメニューか、または、左端の該当する行の枠の部分をワンクリックすると、●が付きます。それで実行すると、その部分で止まります。(添付画像)

myFileName = Application.GetSaveAsFilename(bkName, "CSVファイル (*.csv),*.csv")

そこで、ローカルウィンドウ(表示メニューの中)で、変数のbkNameが取れているかどうかを調べます。それで確認したら、「F8} を押し、実際のダイアログを出します。

変数で取得して も、ダイアログでファイル名が出ないとしたら、別案のFileDialogを提示します。前回のものを入れ替えてみました。(以下は、一部、拡張子を取る部分が無駄があります。また、Excel2016以外では試していませんので、.FilterIndex =16 の部分が、下位バージョンで変わるはずです)

'//
Sub SampleCSV2()
 Dim myRng As Range
 Dim myFileName As String
 Dim bkName As String, i As Long
 bkName = ActiveWorkbook.Name
 i = InStrRev(bkName, ".")
 If i > 0 Then
  bkName = Left(bkName, i - 1) '拡張子を取る
 End If
 Set myRng = Range("A:C")
 If Application.CountA(myRng) = 0 Then Exit Sub
 'Application.ScreenUpdating = False 'ないほうが良いかもしれない。
 With Worksheets.Add
  myRng.Copy
  .Cells(1, 1).PasteSpecial (xlPasteValues) 'ボタンオブジェクトをコピーしないようにする。
  .Move 'シートの移動
 End With
 Application.CutCopyMode = False 'コピーモードを終了
 '===========入れ替えしました=======
 With Application.FileDialog(msoFileDialogSaveAs)
  .InitialFileName = bkName
  .FilterIndex = 16 '"*.csv"
  If .Show = -1 Then
   myFileName = .SelectedItems(1)
  Else
   ActiveWorkbook.Close False '途中でやめた時、ブックを捨てる
   Exit Sub
  End If
 End With
 '===========
 With ActiveWorkbook
  On Error Resume Next 'ファイル名上書きをキャンセル等した時のため
  .SaveAs Filename:=myFileName, FileFormat:=xlCSV
  On Error GoTo 0
  .Close False
 End With
 'Application.ScreenUpdating = True
 Set myRng = Nothing
End Sub
'//

画像はデバッグの検査
「エクセル 指定範囲をCSV出力」の回答画像4
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No.3のコードで変数のbkNameは取れてました。
そのまま何回か実行してみましたが、問題なく表示されるようになりました。
色々とありがとうございました。

お礼日時:2019/04/11 17:08

こんばんは。



5~6時間開いたままのExcelのファイルで再びやってみたら、どうやってもて出てこなくなってしまいました。これはバグの一種ではないでしょうか。

Application.Dialogs(xlDialogSaveAs).Show , 6
さらに、代用でこの方法でやっていたら、GetSaveAsFilename が、再び出てきましたね。一体どうなっているのか分かりませんが、一つの想像としては、GetSaveAsFilename から後の手順が多いせいなのかもしれないと思いました。

ご質問者のwa-i-waiさんには、以下は問題解決には直結しないので、不本意かもしれませんが、私の想像の範囲から、書き直してみました。もちろん、元のご質問に出たコードは、何も問題がないと思います。

'//
Sub SampleCSV()
 Dim myRng As Range
 Dim myFileName As String
 Dim myFleName As String
 Dim bkName As String, i As long
 bkName = ActiveWorkbook.Name
 i = InStrRev(bkName, ".")
 If i > 0 Then
  bkName = Left(bkName, i - 1) '拡張子を取る
 End If
 Set myRng = Range("A:C")
 If Application.CountA(myRng) = 0 Then Exit Sub
 'Application.ScreenUpdating = False 'ないほうが良いかもしれない。
 With Worksheets.Add
   myRng.Copy
  .Cells(1, 1).PasteSpecial (xlPasteValues) 'ボタンオブジェクトをコピーしないようにする。
  .Move 'シートの移動
 End With
 Application.CutCopyMode = False 'コピーモードを終了
 myFileName = Application.GetSaveAsFilename(bkName, "CSVファイル (*.csv),*.csv")
 If myFileName = "False" Then
  ActiveWorkbook.Close False '途中でやめた時、ブックを捨てる
  Exit Sub
 End If
 With ActiveWorkbook
  On Error Resume Next 'ファイル名上書きをキャンセル等した時のため
  .SaveAs Filename:=myFileName, FileFormat:=xlCSV
  On Error GoTo 0
  .Close False
 End With
 'Application.ScreenUpdating = True
 Set myRng =Nothing
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
朝一番で頂いたコードで実行してみたのですが
名前を付けて保存の画面でファイル名の欄に
作業中のファイル名が表示されませんでした。
エクセル2010では問題ないので、やはりバグなのでしょうか?
また何かお気付きされましたら教えてください。
よろしくお願いいたします。

お礼日時:2019/04/11 09:20

こちらも、Excel 2016で試しています。


前回直した3行を、以下に換えて試してみてください。

Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(, FileFilter:="CSVファイル (*.csv),*.csv")
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
前回直した3行を変更してみましたが、
名前を付けて保存の画面でファイル名の欄に
作業中のファイル名が表示されませんでした。
現状下記なのですが、違ってましたら教えてください。
よろしくお願いいたします。

Sub 全角CSV()
Dim Acbk As String
Acbk = ActiveWorkbook.Name
Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(, FileFilter:="CSVファイル (*.csv),*.csv")
If myFileName = "False" Then Exit Sub
Application.ScreenUpdating = False
With Worksheets.Add
myRng.Copy .Cells(1, 1)
.Move
End With
With ActiveWorkbook
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
.Close False
End With
Application.ScreenUpdating = True
Set myRng = Nothing
End Sub

お礼日時:2019/04/10 17:13

ご質問は、この部分のことでしょうか?


myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")

それは、拡張子を取り除いて上げれば、InitialNameが出てきます。

 Dim Acbk As String
 Acbk = ActiveWorkbook.Name
 Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
 Set myRng = Range("A:C")
 If Application.CountA(myRng) = 0 Then Exit Sub
 myFileName = Application.GetSaveAsFilename(Acbk, "CSVファイル (*.csv),*.csv")
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

下記部分
Dim myRng As Range, myFileName As String
Set myRng = Range("A:A,B:B,C:C")
If myRng Is Nothing Then Exit Sub
myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")

Dim Acbk As String
Acbk = ActiveWorkbook.Name
Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(Acbk, "CSVファイル (*.csv),*.csv")
に変更してみましたが、ダメでした。

他、何か思い当たる部分はありますでしょうか?

よろしくお願いいたします。

お礼日時:2019/04/10 14:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q時刻(時間)表示形式について

添付図をご覧ください。
範囲 A3~A6 に h:mm 形式で時刻を入力しています。
式 =$A3 を入力したセル B3 を右方3列、下方3行にオートフィルしました。
B列の書式は h"時間"mm"分" に設定しました。
C、D列の書式を h"時間"m"分" に設定した後で、D列に下記の[条件付き書式]を設定しました。
ルールの適用先: =$D$3:$D$6
ルールの種類: “数式を…を決定”
ルールの内容↓
 ̄ ̄数式→=MINUTE($A3)=0、書式→表示形式を h"時間" に設定

さて、質問です。
「0時間」という表示を避けたいので、その場合はセル E3、E4 に示すように単に(?)「0分」、「23分」と、マクロを使わないで、表示させる方法があれば教えてください。

Aベストアンサー

こんにちは

条件付き書式を追加すればできそうですが・・・?

「数式を使用して~~」から条件式として
  =$A3<1/24
を代入し、書式をユーザ定義として
  [m]"分"
に設定するのでは、いかがでしょうか?

Q日付の作成方法を教えて下さい。

縦カレンダーを作りたく、色々検索して月初日を作ることは出来ました。
そこから、+1してカレンダーを作りたいのですが上手く出来なかった為、質問させていただきました。


コード
Sub 日付作成()

Dim d As Date
d = Date ' 本日日付
Range("A2").Value = DateSerial(Year(d), Month(d), 1)

Dim tenkiws As Worksheet
Set tenkiws = Worksheets("転記先")

Dim i As Long
For i = 4 To 63 Step 2
tenkiws.Cells(i, 1) = tenkiws.Range("A2") + 1
Next i

End Sub

やりたいこととしては、一行飛ばしに日付を加算させていくなのですが、上のコードだと4行目だけ変わって後は変わりません。
どうすれば63行目まで変えることが出来るのでしょうか?
ご教授宜しくお願い致します。

縦カレンダーを作りたく、色々検索して月初日を作ることは出来ました。
そこから、+1してカレンダーを作りたいのですが上手く出来なかった為、質問させていただきました。


コード
Sub 日付作成()

Dim d As Date
d = Date ' 本日日付
Range("A2").Value = DateSerial(Year(d), Month(d), 1)

Dim tenkiws As Worksheet
Set tenkiws = Worksheets("転記先")

Dim i As Long
For i = 4 To 63 Step 2
tenkiws.Cells(i, 1) = tenkiws.Range("A2") + 1
N...続きを読む

Aベストアンサー

Sub 日付作成()

Dim d As Date
d = Date ' 本日日付
Range("A2").Value = DateSerial(Year(d), Month(d), 1)

Dim tenkiws As Worksheet
Set tenkiws = Worksheets("転記先")

Dim i As Long
For i = 4 To 63 Step 2
tenkiws.Cells(i, 1) = tenkiws.Range("A2") - 1 + i / 2
Next i

End Sub

Qエクセル リストと完全一致するセルに色をつける

シート1のA列とB列に
aaa ccc
bbb ggg
ccc kkk
ddd ooo
と言うリストがあって、A1〜A4はAチーム、B1〜B4まではBチームと名前を付けています
シート2にAチームのリスト4個が続いているものがあればセルを赤、Bチームのリスト4個が続いているものがあればセルを黄色に塗りたいです
AチームとBチームの中には同じ品番がある時もあります
条件付き書式で設定は出来るでしょうか?

Aベストアンサー

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル

 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4

 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5

 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

の4パターンについてそれぞれ調べれば良いだけ。

自分なら
 aaa-bbb-ccc-ddd
のようにシート1から文字列を作り、それが調べるセルで同じパターンになるかを調べます。
シート1はA5セルから、シート2はA11セルからデータが入力されているなら、

 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A11 & A12 & A13 & A14
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A12 & A13 & A14 & A15
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A13 & A14 & A15 & A16
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A14 & A15 & A16 & A17

という条件になる。
この4つのうちの一つでも条件を満たせばセルに赤色を付ければいい。
「Bチーム」についても同様にすればいいので、
この場合、8つの条件式を設定することになります。

面倒でもこの考え方ができていないと、ちょっと条件が変わっただけで対処できずに終わります。
冒頭で「並び順」について書きましたが、並び順がシート1のリストの通りでなくとも色を付けたい場合でも、この考え方は必要ということです。

・・・
ちなみに厄介なのが、どちらのチームにも「ccc」がいるというところかな。
これが無ければ違う方法でシンプルにできるんですけどねえ。

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付け...続きを読む

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

Q日付の数字を取り出し、文字列として表示させたい

A2 A3・・・・・・・・・A8
週数    1 1 1 1 1 1 1 5 5
日付   4/1 4/2 4/3 4/4 4/5 4/6 4/7 ・・・・・・・・・4/29 4/30

上記のような表があります。
A1にA2からA8までで、月曜から始まる日にちの中で小さい日付、大きい日付を出して
下記のように表示させたく、数式を組んだのですがうまくいかず頭を悩ませております。
何卒、ご教授願います。

また、可能でしたら土日除いた場合と、土日含めた場合での表示の仕方をご教授願います。

1週目     5週目
1日~5日    29日~30日

A1=IF(COUNTIF($J$1:$AM$1,"1"),DAY(MIN($J$1:$AM$2)))&"日"&""&"~"&""&IF(COUNTIF($J$1:$AM$1,"1"),DAY(MAX($J$2:$AM$2)))&"日"&""

Aベストアンサー

難しく考え過ぎました。

言ってることは、
第何週
月日のカレンダー
の対応関係表があるので、
第何週ごとに
何日~何日
と表示したい

こういうことでしょ?

とりあえず、添付のサンプルで
どうでしょう?
=DAY(INDEX($B$2:$I$2,MATCH(5,$B$1:$I$1,0)))&"日~"&DAY(INDEX($B$2:$I$2,MATCH(5,$B$1:$I$1,1)))&"日"

MATCH関数で第何週かの最初と最後の
日付のある列を求める方法です。
上記は、第5週の日付を求めて、
DAYで日付の数字だけを取り出して
います。

土日抜きをやるには、最初か最後で
月の前後のテーブルを持つ必要が
あります。

また、
第何週を求めるには、
WEEKNUMという関数で
テーブルを作る必要が
あるでしょう。

QCSVデータ(Test.csv)に A1,B1 A1,B1 A1,C1 A2,B2 A2,B2 A3

CSVデータ(Test.csv)に
A1,B1
A1,B1
A1,C1
A2,B2
A2,B2
A3,B3
A3,B3
というデータが1万レコード入っていたとします。(A1~A100まで100種類)

本来は
A1のペアはB1
A2のペアはB2
A3のペアはB3
となるはずが、上記のように誤ってC1が混在していることに気づく手段はございますでしょうか。

Excelの機能、プログラムなどどんな方法でも構いませんので、Excelフィルタ機能で100回確認する以外の方法がございましたら教えて頂けないでしょうか。

Aベストアンサー

No.5です。

>A列とB列を結合(=A1&"_"&B1)したものを『データ→重複を削除』で重複を削除し、A1で重複しているものをcountifでカウントして2以上のものがおかしい行と判断できる気がしてきました。

具体的なデータがどのようになっているのか不明なので、
C列に A列とB列を連結したデータがいくつあるか?を表示するコードにしてみました。

Sub Sample2()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myStr As String
 Dim myR

  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    myR = Range(Cells(1, "A"), Cells(lastRow, "C"))
     For i = 1 To UBound(myR, 1)
      myStr = myR(i, 1) & "_" & myR(i, 2)
       If Not myDic.exists(myStr) Then
        myDic.Add myStr, 1
       Else
        myDic(myStr) = myDic(myStr) + 1
       End If
     Next i
     For i = 1 To UBound(myR, 1)
      myStr = myR(i, 1) & "_" & myR(i, 2)
      myR(i, 3) = myDic(myStr)
     Next i
    Range(Cells(1, "A"), Cells(lastRow, "C")) = myR
   Set myDic = Nothing
   MsgBox "完了"
End Sub

これで重複がある場合はC列に2以上の数値が表示されます。m(_ _)m

No.5です。

>A列とB列を結合(=A1&"_"&B1)したものを『データ→重複を削除』で重複を削除し、A1で重複しているものをcountifでカウントして2以上のものがおかしい行と判断できる気がしてきました。

具体的なデータがどのようになっているのか不明なので、
C列に A列とB列を連結したデータがいくつあるか?を表示するコードにしてみました。

Sub Sample2()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myStr As String
 Dim myR

  Set myDic = CreateObject("Scripting.Dictionary")
 ...続きを読む

Qエクセルについて、お救い下さい。

B1がC1が結合されている場合に、形が一致していません。とエラーになってしまいます。
結合を解除せずになんとか入力できないでしょうか?ご教示下さい。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub
Cancel = True
If Target.Value = "□" Then
Target.Value = "■"
ElseIf Target.Value = "■" Then
Target.Value = "□"
End If
End Sub

Aベストアンサー

一番安易な方法ですが、Target.Value → Target(1).Value にすればエラーは回避できます。機能的にも問題は無いです。ただ、この後もコードを追加していくのであれば、やめておいた方が良いです。他の回答を待ちましょう!!

Qエクセル ifの使い方を教えて

商品の受注入力をエクセルで管理したいのですが、商品には1商品1単価のものと、1商品5単価のものが存在します。商品・価格一覧は以下の通りです。実際の表は500行ほどあります。
(商品・価格一覧表)
code size P① P② P③ P④ P⑤
 1 S 20
 5 LL 1000 900 800 700 600

(受注枠)
code  数 size  -- P--  total
 1  5  S  20  *1  100
 5  3  LL  800  *2  2400

受注枠には、商品となるcode番号と 受注数量を入力すると一覧表からsizeと単価が引けるように作りました。
code5の商品は、注文する枚数に応じて、1枚なら1000円、2枚900円、3枚800円、4枚700円、5枚なら600円となるように設定したいと考えています。
受注枠のPの枠セル(*1)(*2)には、以下の式を作りました。

IF(K5="","",IF(J5<=3,VLOOKUP(J5,$B$4:$H$5,3),IF(AND(J5>=4,K5=1),VLOOKUP(J5,$B$4:$H$5,3),IF(AND(J5>=4,K5=2),VLOOKUP(J5,$B$4:$H$5,4),IF(AND(J5>=4,K5>=3),VLOOKUP(J5,$B$4:$H$5,5),IF(AND(J5>=4,K5>=5),VLOOKUP(J5,$B$4:$H$5,6),IF(AND(J5>=4,K5>=5),VLOOKUP(J5,$B$4:$H$5,7))))))))

code1の商品のように単価が1つのものは受注数がいくつでも対応しますが、code2の商品のように複数の単価を持つ商品は、上の式では3列目のP ③の800までしか対応してくれません。
受注枠の数量欄に 4 と入力しても5と入力しても800と表示されるだけです。

参考書によると、ifの使い方に問題があるのかと思いますがどうしても解決しません。
参考書片手に作成しましたがこの問題を解決していただけないかと質問に投稿させていただきました。
何卒解決の道筋を教えていただきたくお力をお借りします。宜しくお願い致します。

商品の受注入力をエクセルで管理したいのですが、商品には1商品1単価のものと、1商品5単価のものが存在します。商品・価格一覧は以下の通りです。実際の表は500行ほどあります。
(商品・価格一覧表)
code size P① P② P③ P④ P⑤
 1 S 20
 5 LL 1000 900 800 700 600

(受注枠)
code  数 size  -- P--  total
 1  5  S  20  *1  100
 5  3  LL  800  *2  2400

受注枠には、商品となるcode番号と 受注数量を入力すると一覧表からsizeと単価が引けるように...続きを読む

Aベストアンサー

よく分からないのですが、こんなので参考になりますか。
K2セルに次の式が入っています。

【K2セル】=HLOOKUP(J2,A:G,MATCH(I2,A:A,0),TRUE)

Qエクセルでセルのデータがカタカナかどうか調べたい

セルA1の内容が、全角カタカナか半角カタカナか知りたいです。

エクセル関数又はマクロコマンドがあるはずだと信じて探していますが、見つかりません。TYPE関数では、セルの内容が数値か文字列かを調べられますが、その文字列がカタカナか英数字かなどを調べられません。ご存知の方はお教えください。

Aベストアンサー

元の 文字列が、
セルA6に あるとして、
セル内が 全て、
全角片仮名かは、
=SUMPRODUCT((CODE(MID($A$6,COLUMN(OFFSET($A$1,0,0,1,LEN($A$6))),1))=ROW($A$9506:$A$9590))+0)=LEN($A$6)

半角片仮名かは、
=SUMPRODUCT((CODE(MID($A$6,COLUMN(OFFSET($A$1,0,0,1,LEN($A$6))),1))=ROW($A$177:$A$211))+0)=LEN(A6)

で 判りますよ。

Qエクセル 文字列に数字を含む場合に色を付ける条件付き書式設定

エクセル2016です。
文字列に1つでも数字が入っている場合に色をつけたいです。

<例>
 A
1 足立区綾瀬
2 日光市今市1
3 新宿区新宿九
の場合に、A2セルだけ色をつける

どうかよろしくお願いします。

Aベストアンサー

No.3です。私は勘違いしていたようで、すみません。
こんどはちゃんと確認しました。

=MATCH(FALSE,(ISERROR(FIND(COLUMN(A1:J1)-1,A1))),0)

これでいかがでしょうか?
全角の数字が入る可能性はないとしても、もし混入する恐れがあるなら、
ASC関数を入れてください。

=MATCH(FALSE,(ISERROR(FIND(COLUMN(A1:J1)-1,ASC(A1)))),0)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング