[[20180521231416]] 『時間を高速化に』(狭山) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『時間を高速化に』(狭山)

A2以降に入っている漢字を
B列にカタカナに変更のVBAなのですが
1500位のデータを変換するのにかなりの時間が掛かってしまいます。
もっと早く変換できる修正をご教授お願い出来ないでしょうか。

Sub フリガナを取得()
  Dim r As Range
  For Each r In Range("A2", Range("A65536").End(xlUp))
    Range("B" & r.Row).Value = Application.GetPhonetic(r)
  Next
End Sub

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


 こんなので、ワークしないですか?
  ↓
 Sub フリガナを取得()
     Dim r As Range

     Set r = Range("A2", Range("A65536").End(xlUp)).Offset(, 1)

     r.FormulaR1C1Local = "=PHONETIC(RC[-1])"
     r.Value = r.Value
 End Sub

(半平太) 2018/05/21(月) 23:39


手入力したデータなら、PHONETIC関数でフリガナ取得できますが、
外部からインポートしたデータやコピペしたデータの場合は、
取得できません。
その場合は、GetPhonetic を使うしかないと思います。

配列を使って少しは高速化出来ますが、GetPhonetic自体が重い関数なので、
それほど高速化はてきないようです。

Sub フリガナを取得1()

    Dim r As Range, A As Variant, i As Long

    Application.ScreenUpdating = False
    Set r = Range("A2", Range("A65536").End(xlUp))
    A = r.Value
    For i = LBound(A) To UBound(A)
        A(i, 1) = Application.GetPhonetic(A(i, 1))
    Next
    r.Offset(, 1).Value = A
    Application.ScreenUpdating = True
End Sub
(hatena) 2018/05/22(火) 01:59

 フリガナ情報が無いデータって話だったんですか?
 なら、SetPhoneticじゃないですか?

 Sub フリガナを取得()

     With Range("A2", Range("A65536").End(xlUp)).Offset(, 1)
         .Offset(, -1).SetPhonetic
         .FormulaR1C1Local = "=PHONETIC(RC[-1])"
         .Value = .Value
     End With

 End Sub

(半平太) 2018/05/22(火) 07:13


半平太)様 (hatena)様

 お世話になります。
 早速にありがとうございます。

 VBAを入れてみました
 (半平太)様の方ですがB列の漢字のままにに表示されてしまいました。
 (hatena)様の方ですがカタカナ表示で出来ましたが
 外部からインポートしたデータですので約8秒で変換できました。

 ただ私がミスをしてしまいまして
 C2以降のデータをM列に書き出すデータでした。
 申し訳ございません。
 ご教授お願い出来ませんでしょうか
 Set r = Range("A2", Range("A65536").End(xlUp))
 Set r = Range("C2", Range("A65536").End(xlUp))は分かるのですが
 よろしくお願い申し上げます。

(狭山) 2018/05/22(火) 07:29


(半平太)様
 同じタイミングで更新したみたいです。
 後でお返事をいたします。
(狭山) 2018/05/22(火) 07:30

 C列から10個オフセットですか?

 Sub フリガナを取得()

     With Range("C2", Range("C65536").End(xlUp)).Offset(, 10)
         .Offset(, -10).SetPhonetic
         .FormulaR1C1Local = "=PHONETIC(RC[-10])"
         .Value = .Value
     End With

 End Sub

 いずれにしても、時間は掛かりますね。

(半平太) 2018/05/22(火) 07:41


(半平太)様
 お世話になります。
 今、行ってみました。約5秒で出来ました。
 ありがとうございました。

 10個オフセットの意味ですが
 勉強になりました。
 C〜10個目ということなんですね。
 10とー10の部分を変更しながら試してみました。
 ありがとうございました。
(狭山) 2018/05/22(火) 09:21

なら、SetPhoneticじゃないですか?

なるほど、それならループせずにできますね。

実験してみたら、ループに比べて半分以下の時間でできました。
さすがです(@_@)
(hatena) 2018/05/22(火) 10:38


コメント返信:

[ 一覧(最新更新順) ]


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