2016-06-21 9 views
0

У меня есть файл Excel, в котором я должен сменить персонажей Катакана на Хирагану. Я использовал StrConv + vbHiragana в течение некоторого времени, однако, это очень медленно, так как я использую его в диапазоне для 1000 строк (два раза). После поиска, я нашел следующий код, который выглядит как другой подход и выглядит очень быстро. Моя единственная проблема заключается в том, что она работает только в том случае, если я выбираю указанную строку и столбец (например, от A1:A10), а затем, если я запустил ее, она отлично работает. Мне нужно настроить его, чтобы он автоматически делал его в диапазоне и отображал результаты на другом листе. (Из A1:A1000 + D1:D1000) Как это:Katakana to Hiragana в Excel VBA

sample

Вот код, который я нашел:

Sub Comm() 
Dim i, gyos, retus, rwsu As Integer 
Dim KATA, HIRA As String 


gyos = ActiveCell.Row 
retus = ActiveCell.Column 
rwsu = Selection.Rows.Count - 1 


For n = gyos To gyos + rwsu 
KATA = Cells(n, retus) 
HIRA = StrConv(KATA, 32) 
Cells(n, retus) = HIRA 
Next n 


End Sub 

Каждый знает способ обойти это?

Спасибо!

+1

Не используйте 'selection'. Установите свой собственный диапазон. – findwindow

+0

Извините, я не могу ответить на ваш вопрос, не могли бы вы пересмотреть его и посмотреть, сможете ли вы сделать его более ясным, и кто-то может помочь лучше. –

+0

Я постараюсь изо всех сил! Как и изображение, которое я предоставил, Лист 1 содержит исходные данные с символами кандзи + катакана. Символы Katakana находятся в столбце B и столбце D. Мне нужно изменить эти символы и отобразить результаты на листе 2 в тех же столбцах. Код, который я нашел, работает нормально - если я помещаю Worksheets («Sheet2»). Ячейки (n, retus) = HIRA в конце, он даже отображает его на листе прав. Однако макрос работает только в том случае, если я вручную выбираю строки. Я думаю, что это связано с частью «ActiveCell». Однако я не уверен, как это решить. Кроме того, мне нужно запустить его в обеих столбцах B & D. – llorcs

ответ

0

Как что FindWindow предложил, просто установить свой собственный диапазон и использовать его в for цикле:

Dim row as Integer 

For row = 1 to 1000 
    Worksheets("Sheet2").Range("B" & row).Value = StrConv(Worksheets("Sheet1").Range("B" & row).Value, 32) 
    Worksheets("Sheet2").Range("D" & row).Value = StrConv(Worksheets("Sheet1").Range("D" & row).Value, 32) 
Next row 
0

Try это, немного более простой ..

Sub Comm() 
    Dim iRng As Range, uRng As Range 

    Set uRng = Union(Range("A1:A1000"), Range("D1:D1000")) 

    For Each iRng In uRng 

     iRng = StrConv(iRng, vbHiragana) 

    Next iRng 

End Sub 

Kanpai ~

+0

Спасибо за решение! Это также работает и ускоряет весь мой файл около 50%! – llorcs