VBA,使用偏移量

时间:2017-07-05 09:33:22

标签: excel vba excel-vba

我有4个sht,sht1,sht2,sht3和sht4。

我将列E和F从sht 1复制到sht3。然后我查看sht 2中的相应值,并将它们粘贴到sht3中。

然后我在sht3中查看,如果列" G"有" NO&#34 ;;然后我将相应的行复制到sht4。

直到,我已完成编码。

我想查看sht4中的E列,并从sht1粘贴相应的ID。有人能说,我怎么能这样做?

EDIT。

在sht3中,只有在F列中有Id时才会填充行。

在少数情况下,我没有列F,意味着没有ID。

所以,我把它们复制到sht4。现在我在sht4,E列填充。我想在sht1中查看这些ID的相关信息。我想要sht1中每一列的信息,除了E。

我知道我们可以使用Offset,但在这种情况下如何使用它, 我试过以下代码

Sub nlookup()
Dim i As Long
Dim totalrows As Long
Dim rng As Range
Sheets("sht1").Select
totalrows = ActiveSheet.UsedRange.Rows.Count
Sheets("sht4").Select
For i = 5 To totalrows
Set rng = Sheets("sht2").UsedRange.Find(Cells(i, 5).Value)
'If it is found put its value on the destination sheet
If Not rng Is Nothing Then
Cells(i, 6).Value = rng.Value
Cells(i, 1).Value = rng.Offset(0, 0).Value
Cells(i, 2).Value = rng.Offset(0, 14).Value
Cells(i, 3).Value = rng.Offset(0, 1).Value
Cells(i, 4).Value = rng.Offset(0, 2).Value
Cells(i, 12).Value = rng.Offset(0, 8).Value
Cells(i, 13).Value = rng.Offset(0, 9).Value
End If
Next
End Sub
  

设置rng =表格(" sht2")。UsedRange.Find(Cells(i,5).Value),没有必要调查此行,我相信。

Image of sht4. which is extracted from sht3. Image of sht1

2 个答案:

答案 0 :(得分:1)

代码将考虑聊天中讨论的以下内容:

  1. 数据应从sht1复制到sht4,同时在两张表格中
  2. ID分别位于Column LColumn E分别位于sht1sht4
  3. 要从sht1sht4A->AB->CC->DI->L,从J->M复制到O->B的列, sht1
  4. sht4Row 5中的数据分别来自Row 2Sub Demo() Dim srcLastRow As Long, destLastRow As Long Dim srcWS As Worksheet, destWS As Worksheet Dim i As Long, j As Long Application.ScreenUpdating = False Set srcWS = ThisWorkbook.Sheets("Sht1") Set destWS = ThisWorkbook.Sheets("Sht4") srcLastRow = srcWS.Cells(srcWS.Rows.Count, "L").End(xlUp).Row destLastRow = destWS.Cells(destWS.Rows.Count, "E").End(xlUp).Row For i = 2 To destLastRow For j = 5 To srcLastRow If destWS.Cells(i, "E").Value = srcWS.Cells(j, "L").Value Then destWS.Cells(i, "A") = srcWS.Cells(j, "A") destWS.Cells(i, "B") = srcWS.Cells(j, "O") destWS.Cells(i, "C") = srcWS.Cells(j, "B") destWS.Cells(i, "D") = srcWS.Cells(j, "C") destWS.Cells(i, "L") = srcWS.Cells(j, "I") destWS.Cells(i, "M") = srcWS.Cells(j, "J") End If Next j Next i Application.ScreenUpdating = True End Sub

    var canvas1;
    var texture1;
    var image;
    var shaderProgram;
    var vertex_buffer;
    var texture_buffer;
    var aVertLocation;
    var aTexLocation;
    var vertices = [];
    var texCoords = [];
    
    var gl;
    var gl2;
    var canvas2;
    var texture2;
    var shaderProgram2;
    var vertex_buffer2;
    var texture_buffer2;
    var index_Buffer2;
    var aVertLocation2;
    var aTexLocation2;
    var vertices2 = [];
    var texCoords2 = [];
    
    indices = [0, 1, 2, 0, 2, 3];
    vertices = [-1, -1, 1, -1, 1, 1, -1, 1];
    texCoords = [0, 0, 1, 0, 1, 1, 0, 1];
    
    function initApp()
    {
      initWebGL();
      
      image = new Image();
      image.onload = function(){
        render();
        render2();
      }
      image.crossOrigin = '';
      image.src = 'https://i.imgur.com/ZKMnXce.png';
    }
    
    function initWebGL()
    {
    
      canvas1 = document.getElementById('glCanvas1');
      gl = canvas1.getContext('webgl');
    
      /*====================== Shaders =======================*/
    
      // Vertex shader source code
      var vertCode =
        'attribute vec2 coordinates;' +
        'attribute vec2 aTexCoord;' +
        'varying highp vec2 vTexCoord;' +
        'void main(void) {' +
          'gl_Position = vec4(coordinates,1.0,1.0);' +
          'vTexCoord = aTexCoord;' +
        '}';
      var vertShader = gl.createShader(gl.VERTEX_SHADER);
      gl.shaderSource(vertShader, vertCode);
      gl.compileShader(vertShader);
    
      //fragment shader source code
      var fragCode =
        'uniform sampler2D texture;' +
        'varying highp vec2 vTexCoord;' +
        'void main(void) {' +
          ' gl_FragColor = texture2D(texture, vTexCoord);' +
        '}';
      var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
      gl.shaderSource(fragShader, fragCode);
      gl.compileShader(fragShader);
    
      shaderProgram = gl.createProgram();
      gl.attachShader(shaderProgram, vertShader);
      gl.attachShader(shaderProgram, fragShader);
      gl.deleteShader( vertShader );
      gl.deleteShader( fragShader );
      gl.linkProgram(shaderProgram);
      gl.useProgram(shaderProgram);
    
      aVertLocation = gl.getAttribLocation(shaderProgram, "coordinates");
      aTexLocation = gl.getAttribLocation(shaderProgram, "aTexCoord");
    
      vertex_buffer = gl.createBuffer();
      gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
      gl.enableVertexAttribArray(aVertLocation);
      gl.vertexAttribPointer(aVertLocation, 2, gl.FLOAT, false, 0, 0);
      gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
      gl.bindBuffer(gl.ARRAY_BUFFER, null);
    
      texture_buffer = gl.createBuffer();
      gl.bindBuffer(gl.ARRAY_BUFFER, texture_buffer);
      gl.enableVertexAttribArray(aTexLocation);
      gl.vertexAttribPointer(aTexLocation, 2, gl.FLOAT, false, 0, 0);
      gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(texCoords), gl.STATIC_DRAW);
      gl.bindBuffer(gl.ARRAY_BUFFER, null);
    
      index_buffer = gl.createBuffer();
      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buffer);
      gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
    
      texture1 = gl.createTexture();
      gl.bindTexture(gl.TEXTURE_2D, texture1);
      gl.uniform1i( gl.getUniformLocation( shaderProgram, 'texture' ), 0 );
      gl.bindTexture(gl.TEXTURE_2D, null);
    
    
      //==========================================================//
    
      canvas2 = document.getElementById('glCanvas2');
      gl2 = canvas2.getContext('webgl');
      var vertShader2 = gl2.createShader(gl2.VERTEX_SHADER);
      var fragShader2 = gl2.createShader(gl2.FRAGMENT_SHADER);
      gl2.shaderSource(vertShader2, vertCode);
      gl2.shaderSource(fragShader2, fragCode);
      gl2.compileShader(vertShader2);
      gl2.compileShader(fragShader2);
    
      shaderProgram2 = gl2.createProgram();
      gl2.attachShader(shaderProgram2, vertShader2);
      gl2.attachShader(shaderProgram2, fragShader2);
      gl2.deleteShader( vertShader2 );
      gl2.deleteShader( fragShader2 );
      gl2.linkProgram(shaderProgram2);
      gl2.useProgram(shaderProgram2);
    
      aVertLocation2 = gl2.getAttribLocation(shaderProgram2, "coordinates");
      aTexLocation2 = gl2.getAttribLocation(shaderProgram2, "aTexCoord");
    
      vertex_buffer2 = gl2.createBuffer();
      gl2.bindBuffer(gl2.ARRAY_BUFFER, vertex_buffer2);
      gl2.enableVertexAttribArray(aVertLocation2);
      gl2.vertexAttribPointer(aVertLocation2, 2, gl2.BYTE, false, 0, 0);
      gl2.bufferData(gl2.ARRAY_BUFFER, new Float32Array(vertices), gl2.STATIC_DRAW);
      gl2.bindBuffer(gl2.ARRAY_BUFFER, null);
    
      texture_buffer2 = gl2.createBuffer();
      gl2.bindBuffer(gl2.ARRAY_BUFFER, texture_buffer2);
      gl2.enableVertexAttribArray(aTexLocation2);
      gl2.vertexAttribPointer(aTexLocation, 2, gl2.BYTE, false, 0, 0);
      gl2.bufferData(gl2.ARRAY_BUFFER, new Float32Array(texCoords), gl2.STATIC_DRAW);
      gl2.bindBuffer(gl2.ARRAY_BUFFER, null);
    
      index_buffer2 = gl2.createBuffer();
      gl2.bindBuffer(gl2.ELEMENT_ARRAY_BUFFER, index_buffer2);
      gl2.bufferData(gl2.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl2.STATIC_DRAW);
      gl2.bindBuffer(gl2.ELEMENT_ARRAY_BUFFER, null);
    
      texture2 = gl2.createTexture();
      gl2.bindTexture(gl2.TEXTURE_2D, texture2);
      gl2.uniform1i( gl2.getUniformLocation( shaderProgram2, 'texture' ), 0 );
      gl2.bindTexture(gl2.TEXTURE_2D, null);	
    }
    
    function updateTexture()
    {
      gl.bindTexture(gl.TEXTURE_2D, texture1);
      gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
      gl.generateMipmap(gl.TEXTURE_2D);
      gl.bindTexture(gl.TEXTURE_2D, null);
    } 	
    
    function render()
    {
      if ( !shaderProgram ) return;
      updateTexture();
      gl.clearColor(0.0, 0.0, 0.0, 1.0);
      gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT );
      gl.bindTexture(gl.TEXTURE_2D, texture1);
      gl.enableVertexAttribArray(aVertLocation);
      gl.enableVertexAttribArray(aTexLocation);
      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buffer)
      gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
      gl.disableVertexAttribArray(aVertLocation);
      gl.disableVertexAttribArray(aTexLocation);
    
    }
    
    function updateTexture2()
    {
      gl2.bindTexture(gl2.TEXTURE_2D, texture2);
      gl2.texImage2D(gl2.TEXTURE_2D, 0, gl2.RGBA, gl2.RGBA, gl2.UNSIGNED_BYTE, canvas1);
      gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_MAG_FILTER, gl2.LINEAR);
      gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_MIN_FILTER, gl2.LINEAR);
      gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_WRAP_S, gl2.CLAMP_TO_EDGE);
      gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_WRAP_T, gl2.CLAMP_TO_EDGE);
      gl2.generateMipmap(gl2.TEXTURE_2D);		
      gl2.bindTexture(gl2.TEXTURE_2D, null);
    } 	
    
    function render2()
    {
      if ( !shaderProgram2 ) return;
      updateTexture2();
      gl2.clearColor(0.0, 0.0, 0.0, 1.0);
      gl2.clear( gl2.COLOR_BUFFER_BIT | gl2.DEPTH_BUFFER_BIT );
      gl2.bindTexture(gl2.TEXTURE_2D, texture2);
      gl2.enableVertexAttribArray(aVertLocation2);
      gl2.enableVertexAttribArray(aTexLocation2);
      gl2.bindBuffer(gl2.ELEMENT_ARRAY_BUFFER, index_buffer2);
      gl2.drawElements(gl2.TRIANGLES, 6, gl2.UNSIGNED_SHORT,0);
      gl2.disableVertexAttribArray(aVertLocation2);
      gl2.disableVertexAttribArray(aTexLocation2);
    }
    
    document.addEventListener('DOMContentLoaded', initApp);

答案 1 :(得分:0)

为什么不使用Cells(i, 4).Value = rng.Cells(i, 6).Value? 还要摆脱.Select

Sub nlookup()
dim sht as Worksheet
Dim i As Long
Dim totalrows As Long
Dim rng As Range

totalrows = Sheets("sht1").UsedRange.Rows.Count
Set sht = Worksheets("sht4")

For i = 5 To totalrows
Set rng = Sheets("sht2").UsedRange.Find(sht.Cells(i, 5).Value)
'If it is found put its value on the destination sheet
If Not rng Is Nothing Then
sht.Cells(i, 6).Value = rng.Value
sht.Cells(i, 1).Value = rng.Cells(i, 1).Value
sht.Cells(i, 2).Value = rng.Cells(i, 16).Value
sht.Cells(i, 3).Value = rng.Cells(i, 4).Value
sht.Cells(i, 4).Value = rng.Cells(i, 6).Value
sht.Cells(i, 12).Value = rng.Cells(i, 20).Value
sht.Cells(i, 13).Value = rng.Cells(i, 22).Value
End If
Next
End Sub