基本的に、列AとBに整数が入っています。
ただし、行によっては、列Aのセルだけ、又は列A・Bとも、
内容が、文字「-」(半角ハイフン)である場合があります。
この場合に、次の処理を一括で行なう方法を教えてください。
「もし、ある行の列Aが数値だったら、その行ではなにもしない。
もし、ある行の列Aが「-」だったら、
その行の列B(=その右のセル)に入っている数値(上記の通りそのセルも「-」の場合もあります)
を2で割った数値を、列Aの「-」に上書き代入する。
もし、列A・Bとも「-」だったら、その行はなにもしないか、どのような処理になっても良い。」
エクセル2000でも、オープンオフィスオーグカルクでも、どちらでも結構です。なるべく具体的に教えてください。
Sub main() For a = 1 To 65536 If Cells(a, "A") = "" Then Exit For If Cells(a, "A") = "-" Then If Cells(a, "B") <> "-" Then Cells(a, "A") = Cells(a, "B") / 2 End If End If Next a End Sub
自動化ということで ExcelのVBAです。
というか質問の内容は VBAでしか実現できないと思います。
列A・Bとも「-」の時は何もしません。
Sub main() For a = 1 To 65536 If Cells(a, "A") = "" Then Exit For If Cells(a, "A") = "-" Then If Cells(a, "B") <> "-" Then Cells(a, "A") = Cells(a, "B") / 2 End If End If Next a End Sub
自動化ということで ExcelのVBAです。
というか質問の内容は VBAでしか実現できないと思います。
列A・Bとも「-」の時は何もしません。
ありがとうございます。
まず実現方法として、A列のセルを上書きするということでワークシート関数ではできないのでマクロを使うことになります。
Excelの場合マクロは次のように標準モジュールを追加してそこに書き込みます。
http://www.officepro.jp/excelvba/ini/index1.html
http://www.officepro.jp/excelvba/ini/index2.html
http://www.officepro.jp/excelvba/ini/index3.html
書きこむコードはこちらです。そのままコピペしてください。
Sub Macro() Dim lastRow As Long Dim i As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow If Cells(i, "A").Value = "-" And IsNumeric(Cells(i, "B").Value) Then Cells(i, "A").Value = Cells(i, "B").Value / 2 End If Next i End Sub
コードの説明
A列の最終列(lastRow)を求めて、ループさせて行ごとに処理する簡単なコードです。
条件は処理しやすいように次のように変換しました。
「A列が-でB列が数値ならば、A列にB列の1/2を書きこむ」
これでA列が空白だったり、B列が文字列だったりというイレギュラーも回避できます。
ありがとうございます。
Excelです。(Excelのどのバージョンでも可能です。)
セルの内容を書き換えることなので、ここではVBAを使用して直接にセル内容を書き換えする方法を考えましょう。
まず処理対象はA列ですが、2行目から処理を始め、セルが空(ヌル)となったところでデータ終わりで処理終了とします。
(多分1行目は見出し文字列があると思います。開始行が異なる場合は初期値設定でセットする値を変えればいいです。)
下のマクロをVBAモジュールに貼り付けで組み込み、対象データのワークシートを表示している状態でこのマクロを起動します。
Sub colA_Change()
'
Dim wkRow As Integer 'データ処理行
wkRow = 2 'データ処理行初期値設定
'A列のデータが無くなる行まで繰り返す
While Cells(wkRow, 1) <> ""
'
If Cells(wkRow, 1) = "-" Then
'A列がハイフンの場合
If Cells(wkRow, 2) = "-" Then
'B列もハイフンなので処理しない
Else
'B列がハイフンでないのでこれを2で割った値をA列にセットする
Cells(wkRow, 1) = Cells(wkRow, 2) / 2
End If
else
'A列がハイフンでない(数字が入っている)場合は何もしない
End If
'次の行に進める
wkRow = wkRow + 1
Wend
End Sub
ありがとうございます。
ありがとうございます。