[[20251117142628]] 『標柱の文字列を数値に変換して最大値を採用する』(よろしくお願いします) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『標柱の文字列を数値に変換して最大値を採用する』(よろしくお願いします)

表P1(A1:S24)の中のセル内には?T、?U、?V、・・・?]の文字列があり、それらを?T→1、?U→2、?V→3・・・、?]→10に変換して、その数値の中の最大値をT1に採用したい。
同じく表P2でT2に採用し、どうようにP12、T12まで行って、そのT1〜T12の平均値を求めたい。

< 使用 Excel:Excel2013、使用 OS:Windows11 >


文字化け等してしまっておりますので訂正します。
標柱は表中の間違い。
セル内には、AからJまでの文字が入力されており、それらをAは1、Bは2、Cは3、
Dは4、Jは10という風に変換したい。
表はP1からP12まであり、各表における最大値を採用したものに対して平均値とヒストグラムを算出したい。
(よろしくお願いします) 2025/11/17(月) 14:44:16

やりたいことだけ書いてあり、質問が読み取れません。
どこがわからないのか?何を知りたいのか?
を明確に掲載してください。

Aは1、Bは2…であれば、
Aの文字コードを取得して、1になるように引き算してあげればよいと思います。

>表はP1からP12まであり
というのは、シートが12個あって、シート名がP1、P2…となっているという事ですか?
(匿名) 2025/11/17(月) 14:59:17


>それらをAは1、Bは2、Cは3、Dは4、Jは10という風に変換したい。

この部分だけです。

=CODE(A1)-64
(メジロ) 2025/11/18(火) 07:03:49


>AからJまでの文字が入力されており
例をあげて説明されたら。
(?) 2025/11/18(火) 09:58:41

 ・最大値の算定
   JからAまで順次findメソッドで検索。見つかればそれが最大値なのでForを抜ける。
 ・置換
   それぞれの文字をReplaceメソッドで置換
 ということでしょう。
 これを、範囲を引数にして最大値を返すプロシージャにしておいて、それを範囲の数だけ繰り返す。

 生成AIに指示するような書き方なので、日頃からそうしているのでしょう。
 ↑の方針を伝えてコードを書いて貰ったらよいと思います。

(xyz) 2025/11/18(火) 10:52:36


いろいろとありがとうございました。文章力が全くゼロであることを知りました。また、やりたいことと質問を明確に識別する必要を知りました。知りたいことを明確にして記述するようにします。因みにAIは嫌いなので使ったことはありません。
(よろしくお願いします) 2025/11/20(木) 16:58:57

>いろいろとありがとうございました。
たったそれだけ。
色々回答がありますけどそれに対する返信はないのですか。
(?) 2025/11/20(木) 17:15:42

すみません、一括ではなく個別に感謝いたします。ありがとうございました。いろいろご対応いただきましたが、理解の及ぶものではなく、そっけない対応となりましてお詫びします
(よろしくお願いします) 2025/11/20(木) 17:48:08

 Sub test()
     Dim rngAll  As Variant
     Dim rng     As Variant
     Dim k       As Long
     Dim newWs   As Worksheet

     '全対象範囲(★サンプルにつき対象範囲は修正が必要)
     rngAll = Array(Range("Sheet1!A1:B3"), Range("Sheet1!A6:C8"), Range("Sheet2!A1:B3"))
     ReDim max値(0 To UBound(rngAll))    '各範囲毎の最大値を要素とする配列

     k = -1
     For Each rng In rngAll
         k = k + 1
         max値(k) = task(rng)
     Next

     '結果の書き出し
     Set newWs = Worksheets.Add(After:=Sheets(Worksheets.Count))
     newWs.[B1] = "最大値"
     newWs.[B2].Resize(UBound(max値) + 1, 1) = Application.Transpose(max値)
     newWs.[C1] = "平均値"
     newWs.[C2] = Application.Average(max値)
 End Sub

 Function task(rng As Variant) As Long
     Dim k       As Long
     Dim s       As String
     Dim tmp     As Range

     '最大値を求める
     For k = Asc("J") To Asc("A") Step -1
         s = Chr(k)
         Set tmp = rng.Find(s, LookIn:=xlValues, LookAt:=xlPart)
         If Not tmp Is Nothing Then
             task = k - Asc("A") + 1
             Exit For
         End If
     Next
     '文字列の置換
     For k = Asc("A") To Asc("J")
         s = Chr(k)
         rng.Replace s, k - Asc("A") + 1, LookAt:=xlPart, MatchCase:=True
         '”大文字小文字の区分は必要”と仮定した。区分不要ならMatchCase:=False
     Next
 End Function
 ヒストグラム云々はそちらで手作業して下さい。

 実行したいことだけ書くのではなく、本文に依頼文言をきちんと書いて下さい。
 ニックネームでお茶を濁すんじゃなく、相手は人間なんだから節度を持ってやりとりしましょう。
 まあ、私の生成AI云々のコメントも五十歩百歩ですがね。(正直、ムッとしたのは確か)

 丸投げには賛否含め受け止め方は多岐にわたります。
 私見では、質問ポイントを書いてもらったほうが互いに有益な情報交換になると思っています。
 必要であれが追加の説明も可能ということです。
 # 最近は質問して回答があっても知らんぷりの人が散見されるが、昔はそうでもなかったと思う。
 # ひとつひとつの回答を検証してフィードバックする人も多かった印象(言い過ぎかも)。

(xyz) 2025/11/20(木) 21:28:42


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.