Excel2000使用者です。お世話になります。
A1セルからA100セルまでに数値、文字列混在のデータがあります。
この中から最大値を抽出したいのですがやり方を教えて下さい。
例えば..こんな感じでデータだあります。
[A1][A2][A3][A4][A5]
[1] [2] [5-8][6][9-10]
見づらいかも知れませんが、A1,A2,A4セルが数値でA3,A5セルが文字列です。
この場合だと、A5セル内の「10」という最大値を数値として他のセルに抽出したいです。
私の乏しい知識では思い浮かびません。
どうかお知恵を拝借させて下さい。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
文字列混在の抽出方法は、通常の一般関数では不可能だと思います。以下のコードは、文章の中からでも、最大値を探してきます。
設定の仕方:
Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。
次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、再び、Alt + F11 で、画面を閉じます。
後は、一般関数のように、
=findfig(範囲) ....(通常、登録されていない関数は小文字になります。)
とすれば、最大値が現れます。その範囲が、文章であっても、その中から最大値を探してきます。エラー値は無視されます。ただし、Excelの既存のMAX関数のように、現在の方法では、数値を直接、引数に入れることが出来ません。オプションで、=findfig(範囲,True)で、最小値を探すようにしてみました。
'<標準モジュール>
'--------------------------------------------
Function FindFig(範囲 As Range, Optional オプション As Boolean = False)
'文字列混在の中から、最大値を探し出す(オプション=Trueで最小値)
Dim Re As Object
Dim rng As Range
Dim Matches As Object
Dim Match As Object
Dim myValues() As Double
Dim i As Long
Set Re = CreateObject("VBScript.RegExp")
Set rng = 範囲
Application.Volatile
With Re
.Global = True
.Pattern = "(\d+)"
For Each c In rng
If Not IsError(c) Then
Set Matches = .Execute(c.Value)
For Each Match In Matches
ReDim Preserve myValues(i)
myValues(i) = .Replace(Match, "$1")
i = i + 1
Next
End If
Next c
End With
Set Re = Nothing
If オプション = False Then
FindFig = WorksheetFunction.Max(myValues)
Else
FindFig = WorksheetFunction.Min(myValues)
End If
End Function
'--------------------------------------------
No.4
- 回答日時:
A列に入力されている文字列はハイホン(-)がないものは数字のみであり、ハイホンは1個でハイホンの右もまた数字であり、またハイホンの右の数字は仮に5字以内だという前提でお答えします。
まずB列を作業列とし、B1に次の数式を入力して下方向にコピーします。
=VALUE(IF(ISERR(FIND("-",A1,1)),A1,MID(A1,FIND("-",A1,1)+1,5)))
この式はA列の文字中ハイホンがないものはそのまま、あるものははハイホンの右の文字を取り出し、式最初のVALUE関数で数値化するという意味です。なお、FINDの部分はSEARCHでもOKだし、式最後の「5」というのは5文字という意味ですから10でも15でも構いません。
以上の後、例えばB6に
=MAX(B1:B6)
と入力し完了です。
これはNo.3kaisendon さんの回答に考え方はほぼ共通していますが、計算式をやや簡略化しています。
なお、A列の文字のうち、ハイホンの左が数字でなく文字(A,Bなど)である場合も成立しますが、ハイホンがなくて数字の左に文字があったりハイホンの右に文字があったりするとこの式が成立しないことはもちろんです。
No.3
- 回答日時:
こんにちは
「文字列」はご質問の例にあるように
2つの正の数字が - で区切られている物のみ、という前提で。
A B
1 1 1
2 2 2
3 5-8 8
4 6 6
5 9-10 10
どこか空いている列(どこでもいいですが、仮にB列)を作業列としました。
B1に入った式は
=IF(ISERROR(FIND("-",A1)),A1*1,MAX(LEFT(A1,FIND("-",A1)-1)*1,RIGHT(A1,LEN(A1)-FIND("-",A1))*1))
この式を下方向にフィルコピー
(フィルハンドルのダブルクリックでもいいです)
とした後に、任意のセルで =MAX(B1:B5)
とすれば質問内容に見合う形では、ご希望の結果が得られると思います。
ただし、この方法では あ6 10-5-9 1a 等々予期せぬ物には対応していません。
Wendy02さんの作ったユーザー定義関数ならばこれらの物にも対応しているようです^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセルの昇順での数値入力のミスの見つけ方を教えてください。 4 2022/06/26 20:41
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Excel(エクセル) 日付以外のデータを抽出したいのですが、 6 2023/06/27 13:32
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
エクセル:横長の表を改行して...
-
Excel上でのデータ数字が連番で...
-
エクセルで、毎日の走行距離(...
-
別のセルに値が入力されたら、...
-
エクセルで公平にチーム分けす...
-
時間を「昼間」と「夜間」に分...
-
エクセルでセルの値分の個数の...
-
SUMに含まれる範囲から特定のセ...
-
スペースとスペースの間の文字...
-
数式が入ったセルを含めて、数...
-
列の数字に100をかけたい
-
エクセルで小数を含む数値の抽出
-
1つのセルの中にある2桁数字を...
-
エクセル 比例計算
-
[関数について]わかる方教えて...
-
エクセルで1列全部10倍したい
-
Excel HLOOKUPで...
-
EXCELの特定セルを編集不可・コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
スペースとスペースの間の文字...
-
エクセル:横長の表を改行して...
-
エクセルでセルの値分の個数の...
-
列の数字に100をかけたい
-
エクセルで表示されている数字...
-
VBA 同一シート内での転記の仕方
-
別のセルに値が入力されたら、...
-
エクセルのsumifでかけ算してか...
-
エクセルで曜日に応じた文字を...
-
Excelのセル内文字の並び替えに...
-
入退社日より各月末の在籍者数...
-
HYPERLINKとADDRESSとMATCHの組...
-
エクセルで小数を含む数値の抽出
-
Excel 漢字二文字の先頭と最後 ...
-
エクセルにデータを入力すると...
おすすめ情報