日本語の値の抽出方法について | |
---|---|
[195789] 日本語の値の抽出方法について- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ ゆめ -(2023/06/25(16:16)) □U R L/ お世話になっております。 VBA勉強中のため、どなたかご教授願います。 下記の様な表でD列に値がある場合(4行目)にその行の値を抽出して別のシートに貼り付けたいのですが、C列は日本語である「あいうえお」を値として抽出したいと思っています。 色々とネットなどで探してみたのですが、分かりませんでした。 ちなみに、C列は頭文字が「日本語」「アルファベット」「記号」の場合があります。 A B C D 1 A A 2 A A あいうえお 3 A A あいうえお 4 A A ab+cde=1 123 5 A A ab+cde=1 どういった方法があるのか、意味も含めてどなたかご教授願います。 宜しくお願い致します。 OS:Windows10 EXCEL:2016 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195790] Re[1]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ ゆめ -(2023/06/25(16:50)) □U R L/ A B C D 1 A A 2 A A あいうえお 3 A A あいうえお 4 A A ab+cde=1 123 5 A A ab+cde=1 表がずれていたので、再度載せておきます。 宜しくお願い致します。 |
[195791] Re[2]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/06/25(21:31)) □U R L/ 質問です。 まず、日本語の定義を明確にする必要があります。 "夢","ゆめ","yume","YUME","ユメ","ユメ(半角)"のどれが日本語か? "あいうえお","あうお(日本語にはなさそう)","びゅーん(擬音)","ちばる(沖縄方言)"は日本語か? 日本語かの判定基準がすごく難しいのなら、辞書を作ることは困難なので、AIに聞いても解らないかも知れません。 次に、 >D列に値がある場合(4行目)にその行の値を抽出して別のシートに貼り付けたいのですが、C列は日本語である「あいうえお」を値として抽出したい D列に値"123"がある(4行目)目のC列の値は"ab+cde=1"のように見えますが、どういう基準で"あいうえお"を抽出することになるのですか? >ちなみに、C列は頭文字が「日本語」「アルファベット」「記号」の場合があります。 判定基準は頭文字だけで、"あABC"は日本語、"Aあいうえお"は日本語以外ということでしょうか |
[195797] Re[3]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ ゆめ -(2023/06/29(17:55)) □U R L/ kazuo 様 質問ありがとうございます。 ご連絡が遅くなり、申し訳ございません。 > まず、日本語の定義を明確にする必要があります。 > "夢","ゆめ","yume","YUME","ユメ","ユメ(半角)"のどれが日本語か? > "あいうえお","あうお(日本語にはなさそう)","びゅーん(擬音)","ちばる(沖縄方言)"は日本語か? 日本語の定義は基本的に「ひらがな」「漢字」「カタカナ(半角・全角」になり アルファベットが混ざることはありませんが「−(伸ばし棒)」は使用することがあります。業務で使用しているものなので方言を使用することはありません。 > D列に値"123"がある(4行目)目のC列の値は"ab+cde=1"のように見えますが、どういう基準で"あいうえお"を抽出することになるのですか? C列はA列のアルファベットが同じなら上の日本語の「あいうえお」を抽出したいです。 > 判定基準は頭文字だけで、"あABC"は日本語、"Aあいうえお"は日本語以外ということでしょうか C列は日本語で始まる値は全て日本語になり、アルファベット等が混ざることはありません。 こちらの説明不足で混乱させてしまい、申し訳ございませんが ご教授宜しくお願い致します。 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195799] Re[4]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/06/30(14:33)) □U R L/ 回答ありがとうございます。 アドバイスです。 >C列は日本語で始まる値は全て日本語になり、アルファベット等が混ざることはありません。 >日本語の定義は基本的に「ひらがな」「漢字」「カタカナ(半角・全角」 >業務で使用しているものなので方言を使用することはありません と言うことは1文字目だけで判断すれば良いです。if left(Cセル文字列,1) like [ ] then (下記参照) かなは"全ての小文字,ゐ,ゑ,を,ん"を除外(半角カナ・カタカナも同様) 又はそのような文字で始まることはあり得ないので上記は考慮しなくとも良いのなら、 ttp://officetanaka.net/excel/vba/tips/tips145.htm 漢字は文字パレットを見ていただいて、第1〜第4水準漢字のみだけとして良いのなら、 "々"は不要でしょうが、 ttps://extan.jp/?p=4437#VBA%E3%81%9D%E3%81%AE1%EF%BC%9A%E6%96%87%E5%AD%97%E5%88%97%E3%81%8B%E3%82%89%E6%BC%A2%E5%AD%97%E3%81%AE%E3%81%BF%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B 質問です。 >C列はA列のアルファベットが同じなら上の日本語の「あいうえお」を抽出したいです。 A・C列以外は判定不要でD列と同行の値で良いですか? 上にアルファベットの同じA列及びC列が日本語が無い場合は何を記載しますか? A列は昇順ですか?まとまっていますか?ランダムですか? C列の値は何度でも使用可能ですか?(1度だけ可能:例えばD5に値があったとして、C3は使用してしまったので、C2の値を使用する) |
[195801] Re[5]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ ゆめ -(2023/06/30(18:21)) □U R L/ kazuo様 ご回答及びアドバイスありがとうございます。 まずは試してみたいと思います。 > A・C列以外は判定不要でD列と同行の値で良いですか? A・C列以外は判定不要で同行の値を抽出したいです。 > 上にアルファベットの同じA列及びC列が日本語が無い場合は何を記載しますか? A列が同じアルファベットのものは、必ずC列の(アルファベットの)上に日本語がある表になっております。 > A列は昇順ですか?まとまっていますか?ランダムですか? A列は基本昇順に並んでおりますが、アルファベットが飛び飛びになっております。 「A」の次が「C」だったりといった感じです。 > C列の値は何度でも使用可能ですか?(1度だけ可能:例えばD5に値があったとして、C3は使用してしまったので、C2の値を使用する) 基本的にA列〜C列が項目になり、D列以降が値になりますので、A列が同じアルファベットでD列に値があれば、複数回使用する可能性があります。 また、今更ですが、D列以外にもF列に値が入れば、同じ値を使用します。 何度もお手数おかけしますが、ご教授宜しくお願い致します。 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195802] Re[6]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/07/01(10:38)) □U R L/ 回答ありがとうございます。 アドバイスです。 ゆめさんにはさっぱりでしょうが、既に私の中ではプログラムのロジックが浮かんでいます。 極力不要なコードは入れたくないので、色々質問させていただいております。 ゆめさんもなんでこんな質問されるのだろうと意識して回答下さい。 質問★です。 >>C列はA列のアルファベットが同じなら上の日本語の「あいうえお」を抽出したいです。 >A列が同じアルファベットのものは、必ずC列の(アルファベットの)上に日本語がある表になっております。 ★1. この"上"というのは1つ上ということですか?(もしそうなら、代替え用のC列の値は評価不要になる) (C5の値の上はC4であり、双方同じ値なので、)★1.そうではないが必ずいくつか上には存在するということですか? >>A列は 略 まとまっていますか?ランダムですか? >A列は基本昇順に並んでおりますが、アルファベットが飛び飛びになっております。 回答が当を得ていません。基本など崩れることがあり得るのなら意味がありません。★2. 的確に回答下さい。 処理としては上から順にセル値を判断していくのが簡単ですが、 もし、A列の値がまとまって居るのなら、1度使った代替え用のC列の値を1つの変数に入れておけば、探し直す必要はありません。 ですが、A列の値がランダムならA列の値に対応した代替え用のC列の値を複数の変数に入れておくか、代替値を探し直す必要があります。 または、A列の値が"A"のものを処理し、次にA列の値が"C"のものを処理する....と処理が複雑になります。 ★3.出力順は元の表の順番である必要がありますか? 不要なら、手間が増えるが事前に並び替えをしておけば簡単な手順で処理が可能なので、上記2.は不問になり得ます。 >また、今更ですが、D列以外にもF列に値が入れば、同じ値を使用します。 ★4. 表全体の把握コードは書けますか?書けるなら以下は不問です。 ★5. イミディトウィンドーに range("A1").CurrentRegion.Select を貼り付けEnterキーを押すと表全体が選択されますか? 上記で選択されない場合は ★6. イミディトウィンドーに activesheet.usedrange.select を貼り付けEnterキーを押すと表全体のみが選択されますか? 余分な領域が選択される場合は ★7. 表は何列まで使用していますか? |
[195803] Re[7]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/07/01(10:48)) □U R L/ 確認です。 >どういった方法があるのか、意味も含めてどなたかご教授願います。 こんなスタンス・方針で進めていって問題無いですか? |
[195809] Re[8]: 日本語の値の抽出方法について- ■ / 記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/07/04(11:05)) □U R L/ 課題を提示したつもりが、upしていませんでした。 >こんなスタンス・方針 何のことやら解りませんよね?私では力不足のようなので退散します。 もし、動作するようなら検討下さい。 Sub D列G列に値がある行の抽出() Const 列 = "J" '表の最大列 Dim shFrom As Worksheet, shTo As Worksheet Dim 表 As Range, rr As Range, r As Range, ra As Range Dim i As Long Dim アルファベット As String, c As String, jc As String, ja As String Set shFrom = Worksheets("Sheet1") Set shTo = Worksheets("Sheet2") shTo.UsedRange.ClearContents '表範囲を所得し、転記データがなければ終了 Set 表 = shFrom.Range("A1", shFrom.Range("A1").End(xlDown)).Resize(, Cells(1, 列).Column) If WorksheetFunction.CountA(表.Range("d:d,f:f")) = 0 Then MsgBox "nothing" Exit Sub End If '表データをshToに貼り付け 表.Copy shTo.Range("A2").PasteSpecial xlPasteValues '1行目は項目行として使用 With shTo Application.Goto .Cells(1) 'セル1表示 '並び戻しキー作成(作業列1) Set 表 = .UsedRange With 表.Offset(, 表.Columns.Count).Columns(1) .Cells(1).Value = 2 .Cells(1).AutoFill .Cells, xlFillSeries .Cells(1).Offset(-1).Value = 1 End With '選択キー作成(作業列2) With .UsedRange With .Offset(, .Columns.Count).Columns(1) Set rr = .Cells .Formula = "=D1&F1" 'D列かF列か両方かに値があれば .Value = .Value 'SpecialCells(xlCellTypeConstants)になる End With End With With .UsedRange 'アルファベットで並び替え .Sort Range("A1"), xlAscending, Header:=xlYes For Each r In rr.SpecialCells(xlCellTypeConstants) '選択キーが有るセルのみ繰り返す Set ra = r.EntireRow.Cells(1, "a") '1列目 アルファベット = ra.Value 'アルファベットは1列目の値 If アルファベット <> ja Then jc = "" 'アルファベットが替わったら日本語記録クリア ja = アルファベット c = ra.Offset(, 2).Value If Not IsJapanese(c) Then 'C列の値が日本語以外なら If jc = "" Then '日本語記録無いなら For i = r.Row - 1 To 1 Step -1 '上の行を検索繰り返し(Doと違い繰り返し制限可能) Set ra = ra.Offset(-1) If ra.Value <> アルファベット Then Exit For 'アルファベットが替わったら検索終了 If IsJapanese(ra.Offset(, 2).Value) Then jc = ra.Offset(, 2).Value '日本語なら日本語記録 Exit For 'し、検索終了 End If Next End If Else jc = c 'C列の値が日本語なら日本語記録 End If r.EntireRow.Cells(1, "C").Value = jc 'C列に日本語もしくは""を代入 Next .Sort .Columns(.Columns.Count - 1), Header:=xlYes '並び戻し .AutoFilter .Columns.Count, "" '選択キー無しでフィルター .EntireRow.Delete '表示されている行を削除 .Columns(.Columns.Count - 1).Resize(, 2).ClearContents '作業列クリア End With End With End Sub Function IsJapanese(ss As String) As Boolean Dim s As String IsJapanese = True '漢字とする s = Left(ss, 1) '文字列の1文字目のみ検査 If Not s Like "[亜-熙一-龠]" Then '漢字以外(記号"々"は除く)なら s = StrConv(StrConv(s, vbWide), vbHiragana) '全角ひらがな化 If Not s Like "[あ-わヴ]" Then '全角ひらがな(一部"ァ"や"ゑ"などは除く)と"ヴ"以外なら IsJapanese = False '漢字では無いとする End If End If End Function この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195812] Re[9]: 日本語の値の抽出方法について- ■ / 記事引用/メール受信=OFF■ □投稿者/ ゆめ -(2023/07/06(12:36)) □U R L/ kazuo 様 色々とアドバイスいただき、ありがとうございます。 上記でアドバイスいただいたプログラムを駆使して 自分で試してみたいと思います。 こちらの分かり辛い説明にもご対応いただき ありがとうございました。 また、機会がございましたら宜しくお願い致します。 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195813] Re[10]: 日本語の値の抽出方法について- ■記事引用/メール受信=OFF■ □投稿者/ ヘンリー -(2023/07/10(10:33)) □U R L/ 掲示板に問い合わせるためのアドバイスとなります。 >VBA勉強中のため、どなたかご教授願います。 VBAの前に日本語プログラムを書く訓練をしてみてはいかがでしょうか。 例えば、運動会のプログラミングをします。 8:00 開会式 8:30 徒競走 9:40 フォークダンス 10:30 玉入れ 11:30 昼食 12:30 綱引き 13:30 持久走 15:00 騎馬戦 16:00 閉会式 16:30 散会 以上のようなプログラムが出来ました。 ※競技名や時間はでたらめですが、 上記の様に「やる事を順番に細かく書く」 というのもプログラミングです。 そして、それをVBAという規約にのっとって コード化する事を「コーディング」と言います。 この様に、プログラムは日本語で書く事が出来ます。 そして、「ゆめ」様の例で行くと、 1.D列のセルの値をn行目(初期値は1)から順に確認する 2.D列に値が入っていたら、3を実行、入っていなかったら4から実行 3.C列の値が日本語の場合、C列の値を日本語でない場合、D列の値をメモリにセット 4.nに1を足して1に戻る とこんな感じです。 そして、「1〜4の何番目のコードの書き方が分かりません」 というような質問をすると、解決しやすくなります。 又、ネットで調べても、対応するコードが見つかりやすくなります。 という事で、 まずは、コンピュータにやってほしい事を なるべく細かく箇条書きにしたプログラムを作ってみましょう。 「フローチャート」でネット検索してみるのも良いでしょう。 |
このトピックに書きこむ |
---|