- ベストアンサー
エクセルのプログラミングコードについてです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2 すみません。 (1) Do While ActiveSheet.Cells(ActiveSheet.Rows.Count, 5).End(xlUp).Row <= Column (2) Do While ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row <= Column (3) ActiveSheet.UsedRange.row + ctiveSheet.UsedRange.Rows.count - 1 <= Column (4) ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row <= Column の間違いでしたね。(>_<)
その他の回答 (5)
- kanemoto_s
- ベストアンサー率45% (112/244)
#2 >仮にA100までの変換をしたい場合どのように入力すればいいのでしょうか。 Do While ActiveSheet.Cells(Column, 5) <> "" の部分を Do While Column < 100 でも可能ですがスマートではありません。 前回の回答ですが、バグが発生することがあるので、 こちらの記事を参考にするとよいです。 https://excel-ubara.com/excelvba4/EXCEL222.html 悪い例 (1) Do While ActiveSheet.UsedRange.Rows.Count > Column (2) Do While ActiveSheet.Cells(Rows.Count, 5).End(xlUp).Row > Column (1)は1行目が空だと途中で終了してしまう。 (2)は途中に空白があると終了してしまう。 正しく動作する例 (1) Do While ActiveSheet.Cells(ActiveSheet.Rows.Count, 5).End(xlUp).Row > Column (2) Do While ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row > Column (3) ActiveSheet.UsedRange.row + ctiveSheet.UsedRange.Rows.count - 1 > Column (4) ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row > Column (1)~(4)のどらかを、 Do While ActiveSheet.Cells(Column, 5) <> "" の部分に差し替えるとよいです。 (2)がお勧め (1)は5列の最後の行からCtrl+↑を押したセルの行番号 (2)は編集したことのある最後のセルの行番号 (3)は使用中セル範囲の行数と使用中セルの最初の行番号から最終行の行番号を計算 (4)は使用中セル範囲の最後のセルの行番号 をそれぞれ取得して処理中の行番号と比較し、処理中の行番号が最終行を超えるまで、処理を繰り返します ExcelVBAは雑多な考えを持った集団がとりあえず動くように言語を作ったので、行儀が悪いと評されています。 これからプログラミングを勉強するなら、Pythonなどがお薦めです。
- kkkkkm
- ベストアンサー率66% (1742/2617)
> A列にコピペ、B列に変換したものを表示する コードはA列のデータのふりがなをF列に表示しています。 B列に表示したいのでしたら 最後の方にある Cells(viewColumn, 6) を Cells(viewColumn, "B") に変更してください。 > 仮にA100までの変換をしたい場合どのように入力すればいいのでしょうか。 もとがE列のデータがあるかないかで動作していますので E列の最終データのある行までを対象にします(途中空白があっても最終行まで操作します) 100行目までにしたいのでしたら LastRow = ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Row を LastRow = 100 にしてください。 E列ではなくA列の最終行までを実行の基準としたい場合は、最初の"E"を"A"に変更してください。 空白かどうかの判断もA列にしたい場合は、後で出てくる"E"を"A"に変更してください。(E列のままでしたらE列が空白の行はA列の同行のデータを変換しません) 元のコードを極力変更しないようにしています。 前半部分を以下のように変更してください。 Private Sub CommandButton1_Click() '文字データ取得 Dim Column As Long Dim line As Long Dim value() As String Dim LastRow As Long Column = 2 line = 0 '参照先カラム全て取得(未入力部分まで) LastRow = ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Row Do While Column <= LastRow '配列を拡張しながら値を取得 If ActiveSheet.Cells(Column, "E") <> "" Then ReDim Preserve value(line) value(line) = ActiveSheet.Cells(Column, "A") End If Column = Column + 1 line = line + 1 Loop
- bardfish
- ベストアンサー率28% (5029/17766)
添付画像が小さすぎてコードを読みてれないのですが、Do Whileメープのループ終了条件が「指定のセルの内容が""(未入力)になるまで」となっているようですので、その条件の箇所を変更してください。 Do Loopのような条件指定ループだとそうせざるを得ないので、どこまでが処理したいデータの範囲なのか、ハッキリと指定してやれば最後まで処理してくれるはずです。 そのかわり元データのセルが空白の場合はエラーで止まる可能性もあるので止まらないように事前にチェックしてから変換させるようにしましょう。
補足
Private Sub CommandButton1_Click() '文字データ取得 Dim Column As Long Dim line As Long Dim value() As String Column = 2 line = 0 '参照先カラム全て取得(未入力部分まで) Do While ActiveSheet.Cells(Column, 5) <> "" '配列を拡張しながら値を取得 ReDim Preserve value(line) value(line) = ActiveSheet.Cells(Column, 1) Column = Column + 1 line = line + 1 Loop '文字データよみかな変換 Dim Index As Long Dim cnt As Long Dim viewColumn As Long Dim tempValue As String viewColumn = 2 '抽出したデータ配列を全て参照 For Each itm In value() '値の読み仮名(カタカナ)を取得 tempValue = Application.GetPhonetic(itm) '読み仮名(カタカナ)をひらがなに変換して出力 Cells(viewColumn, 6) = StrConv(tempValue, vbHiragana) viewColumn = viewColumn + 1 Next itm End Sub ご回答ありがとうございます。 このようなコードになっております。 仮にA100までの変換をしたい場合どのように入力すればいいのでしょうか。
- kanemoto_s
- ベストアンサー率45% (112/244)
Okwaveの写真はとても不鮮明になってしまいますので、どこかのアップローダを使用することをおすすめします。 VBAで編集セル範囲の選択と最終行と最終列の取得 https://vbabeginner.net/vba%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%BB%E3%83%AB%E7%AF%84%E5%9B%B2%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B/ Do While ActiveSheet~ となっている(?)行のところを Do While ActiveSheet.UsedRange.Rows.Count > Row なんか(?)に変えるとよいのではないですか? 不鮮明なので変数の綴りが間違ってるかもしれませんが。
補足
Private Sub CommandButton1_Click() '文字データ取得 Dim Column As Long Dim line As Long Dim value() As String Column = 2 line = 0 '参照先カラム全て取得(未入力部分まで) Do While ActiveSheet.Cells(Column, 5) <> "" '配列を拡張しながら値を取得 ReDim Preserve value(line) value(line) = ActiveSheet.Cells(Column, 1) Column = Column + 1 line = line + 1 Loop '文字データよみかな変換 Dim Index As Long Dim cnt As Long Dim viewColumn As Long Dim tempValue As String viewColumn = 2 '抽出したデータ配列を全て参照 For Each itm In value() '値の読み仮名(カタカナ)を取得 tempValue = Application.GetPhonetic(itm) '読み仮名(カタカナ)をひらがなに変換して出力 Cells(viewColumn, 6) = StrConv(tempValue, vbHiragana) viewColumn = viewColumn + 1 Next itm End Sub ご回答ありがとうございます。 このようなコードになっております。 仮にA100までの変換をしたい場合どのように入力すればいいのでしょうか。
- kkkkkm
- ベストアンサー率66% (1742/2617)
画像がぼやけてコードそのものが見えません。 コードそのものをコピーして補足などに貼り付けてください。
補足
Private Sub CommandButton1_Click() '文字データ取得 Dim Column As Long Dim line As Long Dim value() As String Column = 2 line = 0 '参照先カラム全て取得(未入力部分まで) Do While ActiveSheet.Cells(Column, 5) <> "" '配列を拡張しながら値を取得 ReDim Preserve value(line) value(line) = ActiveSheet.Cells(Column, 1) Column = Column + 1 line = line + 1 Loop '文字データよみかな変換 Dim Index As Long Dim cnt As Long Dim viewColumn As Long Dim tempValue As String viewColumn = 2 '抽出したデータ配列を全て参照 For Each itm In value() '値の読み仮名(カタカナ)を取得 tempValue = Application.GetPhonetic(itm) '読み仮名(カタカナ)をひらがなに変換して出力 Cells(viewColumn, 6) = StrConv(tempValue, vbHiragana) viewColumn = viewColumn + 1 Next itm End Sub ご回答ありがとうございます。 このようなコードになっております。 仮にA100までの変換をしたい場合どのように入力すればいいのでしょうか。
お礼
こちら打ち込ませていただきましたがうまくいかず… 又改めて質問投稿させていただくかもしれませんが、1番丁寧に詳しくご説明いただきましたのでこちらの方をベストアンサーにさせていただきます。 ありがとうございました。