- 締切済み
エクセルVBAを修正したい
数字を入力すると記号に変換になるマクロを 元ファイルを修正して作成したいのですが、 以下の記述が理解できません。 具体的にどのような処理をしているのか教えて下さい。 Do While Len(Range("C" & CStr(I)) & Range("D" & CStr(I))) > 0 For J = StartCol To EndCol If Len(ActiveSheet.Cells(12, J).Value & ActiveSheet.Cells(13, J).Value) > 0 Then tmp = "" If ActiveSheet.Cells(I, J).Value = "×" Or ActiveSheet.Cells(I, J).Value = "中止" Then ' ActiveSheet.Cells(I, J).Value = "中止" 'ActiveSheet.Cells(I, J + 1).Value = "" Else If Len(ActiveSheet.Cells(I, J).Value) = 0 Then K = -1 Else K = ActiveSheet.Cells(I, J).Value End If Select Case K Case 0 tmp = "×" Case 1 To 9 tmp = "△" Case Is >= 10 tmp = "○" Case Is < 0 tmp = "**" End Select
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
参考までに、批判やら、改良やら、解説やらやってみました。 Iの初期値設定の行が「捨てられている」ので、わかりにくい。 ループは2つ (1)行の繰り返し While Wend(これが捨てられている) ForNextでないので、I=I+1がWWendの前でいるはず(これも捨てられている) (2)列の繰り返し For J=StatCol to EndCol Next J(これが捨てられている) ForNextで自動的に次に進む (繰り返し条件・停止条件) 行について、 I行C列かI行D列の両方が空白でなければ Len(Range("C" & CStr(I)) & Range("D" & CStr(I))) > 0 私ならCells(I,"D")<>"" Or Cells(I<"D")<>""と表現する 列について EndCol列まで 除外列 12行目と13行目のどちらかが、データがなければ Tmpは空白をセット それにCell(I,J)の値がXか中止ならTmpは何もしない(ここは前の 値が残るので危険性あり) そうでなければ Cells(I,J)が空白ならK=-1をセット でなければ Cells(I<J)の値をKにセット Tmpにセットする値の場合わけ(SelectCase EndSelect) Case 0は該当が起こらないのでは。 セルの値が 1-9 X 10以上 ○ マイナス(=Cells(I<J)が空白のとき) ** をセットする。 あとTmpをどうするか、(これが捨てられている)。 あえてKに集約することなく、Cells(I<J)をSelectCaseの後に書けば 簡潔になりそう。 ●(捨てられている)と書いた部分は、質問では掲出すべき ●L,M行には何が入っているの ●あとTmpをどうするか?元のCells(I<J)に戻すのか。 ●Cells(I<J)の表現法を進めたい。Range()よりも。 ●Temk=””の場合もしセルに戻すと、データが消えるが良いか ●場合わけの、チェック(全ての場合を網羅しているか)が甘いように思った。表か樹形図でも使って整理してはどうでしょう。 私の好みの流儀では(わざと .ValueやActiveSheetは省いて文字数を少なくしている) Do While Range("C" & I) <> "" Or Range("D" & I) <> "" For J = StartCol To EndCol If Cells(12, J) <> "" Or Cells(13, J) <> "" Then tmp = "" If Cells(I, J) = "×" Or Cells(I, J) = "中止" Then ' tmp=??? Else If Cells(I, J) = "" Then tmp = "**" Else Select Case Cells(I, J) Case 0 tmp = "×" Case 1 To 9 tmp = "△" Case Is >= 10 tmp = "○" End Select End If End If End If Next J I = I + 1 Wend すみません実例データがなく、テストしてません。誤りがあればすみません。第1合目がエラーなら、元の質問のコードに、戻してください。
- HBK_ShowStopper
- ベストアンサー率0% (0/4)
あるデータ範囲にデータが存在する場合、以下の文字列に変換してるだけでは? 未入力:"**" 0:"×" 1~9:"△" 10以上:"○" ソースの内容が途中なので自信ないですが...
お礼
回答ありがとうございます。 未入力:"**" 0:"×" 1~9:"△" 10以上:"○" の修正はできたのですが その上の記述が理解できませんでした。 分かり辛いコードで質問してしまい、すいませんでした。
お礼
回答ありがとうございます。 わからない記述だけピックアップしようとしたのですが、 かなり分かりにくいですよね・・・。 お陰様でおおまかな内容は把握できたので データも提出できました。 次が来るまでにもう少し勉強しておこうと思います。 ありがとうございました。