条件以外と空白セルに色をつけないように指定したいのですが、
specialcells(???blank)で空白セルの選択ができますが、条件式での空白セルの指定方法について教えてください。あと16進数のデータが文字列で表されているのですが、マクロ内でビット取得し、計算処理をさせたいのですが、どう指定したらいいのですか。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>条件式での空白セルの指定方法について


私がよくやるのは、

If Cells(1,1) = "" or Cells(1,1) = NULL Then

です。

16進数というのは&HFFというような表記ですか?
それだとval関数で、
A = Val(&HFF)
で答えAは255です。
A = Val("&HFF")
としても同じです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q指定した文字列を含む行から、指定した文字列を

含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。
対象ファイルに結果を上書きでもかまいません。

指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。

例)

東京都
新宿区
<start123AAA>
東京都
港区
<end>AAABBB
東京都
目黒区

どのファイルにも必ず<start と<end の文字列があります。(必ず1組です)
<start の文字列を含む行から <end の文字列を含む行までを
抽出したいのです。

(欲しい結果↓)

<start123AAA>
東京都
港区
<end>AAABBB

フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが
どうしてもうまくいきません。
抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか?
できればバッチで処理できればなと思っているのですが、うまくいきません。
(<>!""/ あたりが入っています。別の文字に置き換えることは可能です)

範囲を抽出ではなく、
<startを含む行の一つ上の行から前を全て削除
<endを含む行の一つしたの行から後を全て削除
する方法や

VBAで、スタート行をとエンド行をSearchして抽出する方法など
ご教授いただきたくお願い致します。

含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。
対象ファイルに結果を上書きでもかまいません。

指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。

例)

東京都
新宿区
<start123AAA>
東京都
港区
<end>AAABBB
東京都
目黒区

どのファイルにも必ず<start と<end の文字列があります。(必ず1組です)
<start の文字列を含む行から <end の文字列を含む行までを
抽出したいのです。

(欲しい結果↓)

<start...続きを読む

Aベストアンサー

awk で。
対象のテキストがsamp.txtにあるとして

>gawk "/<start/,/<end/" samp.txt
<start123AAA>
東京都
港区
<end>AAABBB

>gawk "/<start/,0" samp.txt
<start123AAA>
東京都
港区
<end>AAABBB
東京都
目黒区

>gawk "NR==1,/<end/" samp.txt
東京都
新宿区
<start123AAA>
東京都
港区
<end>AAABBB

Q特定のキーワードのセルだけ空白にするマクロを教えてください。

URLが入ったセルが1000行くらいのシートの、ある特定のキーワードだけ(20キーワードくらい)を空白にして、なおかつURLの重複を省くマクロが書きたいのですが、どう書いたらいいでしょうか?

Aベストアンサー

Sheet1のA列にURLが1000行、Sheet2のA列にキーワードが20行登録されている場合の例を示します。
結果はSheet3に作成されます。

Private Sub CommandButton1_Click()
  Dim Row As Integer
  Dim i1 As Integer
  Dim i2 As Integer
  Dim i3 As Integer
  Dim p As Integer
  Dim n As Integer
  Dim S As String

  ' Sheet3のクリア
  Sheets("Sheet3").Cells.ClearContents

  Row = 0
  For i1 = 1 To 1000
    S = Sheets("Sheet1").Cells(i1, 1).Value

    ' キーワードの消去
    For i2 = 1 To 20
      n = Len(Sheets("Sheet2").Cells(i2, 1).Value)
      If n = 0 Then Exit For
      p = InStr(S, Sheets("Sheet2").Cells(i2, 1).Value)
      While p > 0
        S = Left(S, p - 1) & Right(S, Len(S) - p + 1 - n)
        p = InStr(S, Sheets("Sheet2").Cells(i2, 1).Value)
      Wend
    Next i2

    ' 重複判定
    If Row > 0 Then
      For i3 = 1 To Row
        If S = Sheets("Sheet3").Cells(i3, 1).Value Then
          S = ""
          Exit For
        End If
      Next i3
    End If

    ' 登録
    If S <> "" Then
      Row = Row + 1
      Sheets("Sheet3").Cells(Row, 1).Value = S
    End If
  Next i1
End Sub

Sheet1のA列にURLが1000行、Sheet2のA列にキーワードが20行登録されている場合の例を示します。
結果はSheet3に作成されます。

Private Sub CommandButton1_Click()
  Dim Row As Integer
  Dim i1 As Integer
  Dim i2 As Integer
  Dim i3 As Integer
  Dim p As Integer
  Dim n As Integer
  Dim S As String

  ' Sheet3のクリア
  Sheets("Sheet3").Cells.ClearContents

  Row = 0
  For i1 = 1 To 1000
    S = Sheets("Sheet1").Cells(i1, 1).Value

 ...続きを読む

Q16ビットCPUで32ビットの計算方法

16ビットのCPUを持つシーケンサ(PLC )で32ビットの四則演算(加算、減算、乗算、除算)をさせたいのですが、命令語にダブルワードを処理できるものがないので、演算がオーバーフローした情報から何かしら自分でプログラムを組まなければなりません。
16ビットのレジスタを使った32ビット演算の考え方を教えてください。

Aベストアンサー

普通は、ダブルワードなんて有りません。

そのCPUのアセンブリ言語での16bitの和、差の演算で、キャリー、ボローは出ませんか?
そうであれば、まず、32bitの数値を上位16bitと下位16bitに分けます。で、自分が、紙に書いて演算するように、演算するようにプログラムを組みます。

たとえば、あなたは、足し算、引き算をするときにどうしていますか?
下位の桁から1桁ずつ計算していませんか?

和であれば、下位同士を足します。そのときに繰り上がりがあったら上位同士を足す時に繰り上がりも足しますよね?
(でも、ふつうのCPUなら、キャリーフラグも足す足し算命令があるハズなんですけどねぇ。)
自分が紙に数値を書いて演算する様に、計算をプログラムして下さい。
ただ、その数字の扱いが10進数ヒトケタではなく、16bitでまとめて考えるだけです。
引き算も一緒ね。本当は、引き算は、反転して一を引いた数(補数)にして、足し算にしちゃうんだけど、それは理解できるようなら、やってください。

かけ算は、スピードを考えないので有れば、その回数だけ足し算を繰り返します。ホントは、bit演算と、シフトと足し算なんですけど、まぁ、単純に足し算で良いでしょう。

わり算は、引き算の回数を数えましょう。そのときに、これもシフトを上手く使えば速度を稼げます。

ということで、自分で紙に書いて、実際に演算をしてから、プログラムを作成してください。
あえて、これ以上は教えません。

#実は私はプログラマさんじゃない(^^;)んで、これ以上は無理です。

普通は、ダブルワードなんて有りません。

そのCPUのアセンブリ言語での16bitの和、差の演算で、キャリー、ボローは出ませんか?
そうであれば、まず、32bitの数値を上位16bitと下位16bitに分けます。で、自分が、紙に書いて演算するように、演算するようにプログラムを組みます。

たとえば、あなたは、足し算、引き算をするときにどうしていますか?
下位の桁から1桁ずつ計算していませんか?

和であれば、下位同士を足します。そのときに繰り上がりがあったら上位同士を足す時に繰り上がりも足します...続きを読む

QZ80アセンブルで16ビット*8ビットの乗算ルーチンを作りたいのですが・・

16ビット*8ビットの掛け算ルーチンを作っています。

HLとAレジスタの掛け算で答えは3バイトで
AHLの順に入れようとしているのですが、
困ったことに符号ありで考えるともうだめです。

HLに入れる値が小さいときはまだいいのですが、
大きくなるとどうしようって感じです。
解決策も浮かばないし・・とほほ

ソースを書いてみますので、お気づきの点があれば
アドバイスをよろしくお願いします。

見づらいプログラムで申し訳ないです(泣)
僕は裏レジ、一切使い(え?)ません(爆)


;IN:HL かけられる数
;:A  かける数
;OUT:AHLの順で入る

;-----------------------------------------
muls16_8:

ld B,A
call mul16_8
bit 8,B
jr z,muls16_8_end
neg

muls16_8_end:

ret
;-----------------------------------------

mul16_8:

push BC
ld B,8
ld IX,0
ld C,0
ld DE,0

mul16_8_loop:

rrca
jr nc,mul16_8_skip

push DE
push HL
pop DE

add IX,DE
pop DE

push AF
ld A,E
add A,C
ld E,A
pop AF

mul16_8_skip:

add HL,HL
rl C
djnz mul16_8_loop

push IX
pop HL
ld A,E

pop BC
ret

なんでタブやスペースを消すんだぁ・・・みづらい・・・

16ビット*8ビットの掛け算ルーチンを作っています。

HLとAレジスタの掛け算で答えは3バイトで
AHLの順に入れようとしているのですが、
困ったことに符号ありで考えるともうだめです。

HLに入れる値が小さいときはまだいいのですが、
大きくなるとどうしようって感じです。
解決策も浮かばないし・・とほほ

ソースを書いてみますので、お気づきの点があれば
アドバイスをよろしくお願いします。

見づらいプログラムで申し訳ないです(泣)
僕は裏レジ、一切使い(え?)ません(爆)...続きを読む

Aベストアンサー

;***************************************************************
;*    MULDE_HL:                               *
;*          ★DE * HL の 結果を DEHL に返す    *
;*          KL5C16030 の MUL DE,HL と 同一動作        *
;*                                         *
;*    入力  DE                               *
;*         HL                               *
;*                                         *
;*    出力  DE          上位 WORD              *
;*         HL          下位 WORD              *
;*                                         *
;*    使用  AF,BC,DE,HL,IX                       *
;*    破壊  DE,HL                             *
;***************************************************************

MULDE_HL:    PUSH    AF
          PUSH    BC
          PUSH    IX
          LD     IXH,D
          LD     IXL,E
          LD     B,H
          LD     C,L
          LD     HL,0000H
;;;;;;;;;;;;;; LD     DE,0000H     ;16回 ローテート するから 初期化不要
          LD     A,16
MULDEHL_L01:  ADD     HL,HL
          RL     E
          RL     D
          ADD     IX,IX
          JR     NC,MULDEHL_S02
          ADD     HL,BC
          JR     NC,MULDEHL_S02
          INC     DE
MULDEHL_S02:  DEC     A
          JR     NZ,MULDEHL_L01
          POP     IX
          POP     BC
          POP     AF
          RET

;***************************************************************
;*    MULSDE_HL:                              *
;*          ★DE * HL の 結果を DEHL に返す    *
;*          KL5C16030 の MULS DE,HL と 同一動作       *
;*                                         *
;*    入力  DE                               *
;*         HL                               *
;*                                         *
;*    出力  DE          上位 WORD              *
;*         HL          下位 WORD              *
;*                                         *
;*    使用  AF,BC,DE,HL,IX                       *
;*    破壊  DE,HL                             *
;***************************************************************

MULSDE_HL:   PUSH    AF
          PUSH    BC
          PUSH    DE
          PUSH    HL
          CALL    MULDE_HL
          EX     DE,HL
          POP     BC         ;HL
          EX     (SP),HL
          BIT     7,H         ;DE
          EX     (SP),HL
          JR     Z,MULSDEHL_S01
          OR     A
          SBC     HL,BC
MULSDEHL_S01: BIT     7,B
          POP     BC         ;DE
          JR     Z,MULSDEHL_S02
          OR     A
          SBC     HL,BC
MULSDEHL_S02: EX     DE,HL
          POP     BC
          POP     AF
          RET



16bit * 16bit の掛け算です ご参考までにどうぞ

;***************************************************************
;*    MULDE_HL:                               *
;*          ★DE * HL の 結果を DEHL に返す    *
;*          KL5C16030 の MUL DE,HL と 同一動作        *
;*                                         *
;*    入力  DE                               *
;*         HL                               *
;*         ...続きを読む

QPIC16F88で500という数字を8ビット+2ビットのレジスタに設定

PIC16F88で500という数字を8ビット+2ビットのレジスタに設定する方法を教えていただきたいです。

変数D1,D2,D3にそれぞれ、0,0,5 という500を意味する各桁の数字が入っているのですが、
これをPWMのDutyのレジスタに8ビット+2ビットで設定したいのですが、
どんな手順をとったら10ビットの2進数に変換できるでしょうか?

Aベストアンサー

16bit単位アクセス可能なレジスタなら普通にshort型変数にD1~D3を合成した結果を入れた上で、その変数を直接レジスタに投げ込めば問題なく入ります。

8bit単位でアクセスするなら、このshort型変数を上位バイト・下位バイトに分割(ビット演算とビットシフトでできます)してそれぞれ投げればOK。

2bit側の残り6bit(以上)の部分に何かしらの意味がある場合はその部分を保持して合成する手順が入るので少し面倒ですが、単純には上記の考え方がベースになります。


人気Q&Aランキング

おすすめ情報